malike 发表于 2018-2-11 11:56:18


            1、降低redis内存占用的优点
 1、有助于减少创建快照和加载快照所用的时间
 2、提升载入AOF文件和重写AOF文件时的效率
 3、缩短从服务器进行同步所需的时间
 4、无需添加额外的硬件就可以让redis存贮更多的数据
2、短结构
Redis为列表、集合、散列、有序集合提供了一组配置选项,这些选项可以让redis以更节约的方式存储较短的结构。
2.1、ziplist压缩列表(列表、散列、有续集和)
通常情况下使用的存储方式
http://files.jb51.net/file_images/article/201703/2017032310540415.jpg
当列表、散列、有序集合的长度较短或者体积较小的时候,redis将会采用一种名为ziplist的紧凑存储方式来存储这些结构。
ziplist是列表、散列、有序集合这三种不同类型的对象的一种非结构化表示,它会以序列化的方式存储数据,这些序列化的数据每次被读取的时候都需要进行解码,每次写入的时候也要进行编码。
双向列表与压缩列表的区别:
为了了解压缩列表比其他数据结构更加节约内存,我们以列表结构为例进行深入研究。
典型的双向列表
在典型双向列表里面,每个值都都会有一个节点表示。每个节点都会带有指向链表前一个节点和后一个节点的指针,以及一个指向节点包含的字符串值的指针。
每个节点包含的字符串值都会分为三部分进行存储。包括字符串长度、字符串值中剩余可用字节数量、以空字符结尾的字符串本身。
例子:
假若一个某个节点存储了'abc'字符串,在32位的平台下保守估计需要21个字节的额外开销(三个指针+两个int+空字符即:3*4+2*4+1=21)
由例子可知存储一个3字节字符串就需要付出至少21个字节的额外开销。
ziplist
压缩列表是由节点组成的序列,每个节点包含两个长度和一个字符串。第一个长度记录前一个节点的长度(用于对压缩列表从后向前遍历);第二个长度是记录本当前点的长度;被存储的字符串。
例子:
存储字符串'abc',两个长度都可以用1字节来存储,因此所带来的额外开销为2字节(两个长度即1+1=2)
结论:
压缩列表是通过避免存储额外的指针和元数据,从而达到降低额外的开销。
配置:
#list
list-max-ziplist-entries 512 #表示允许包含的最大元素数量
list-max-ziplist-value 64#表示压缩节点允许存储的最大体积
#hash         #当超过任一限制后,将不会使用ziplist方式进行存储
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
#zset
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
页: [1]
查看完整版本: 降低PHP Redis内存占用