【 redis之压缩列表】

redis之压缩列表

redis中list、hash、zset底层实现,存储数据量较少时使用压缩列表。
最大元素个数512,元素最大长度64。ziplist可以转为hashtable,反过来不行。
压缩列表的总体思想是 多花时间来换取节约空间 ,即以部分读写性能为代价,来换取极高的内存空间利用率。原因是其使用连续的内存来存储数据,所以存储的数据量不能太多和太大。

config get hash* # 默认配置
hash-max-ziplist-entries
512
hash-max-ziplist-value
64
object encoding user01
ziplist # user01使用的是压缩列表存储数据
hset user01 hobbit basketball
1
object encoding user01
ziplist
hset user01 hobby 1111111111111111111111111111111111111111111111111111111111111111111
0
object encoding user01
hashtable # 当元素长度大于64时会采用hashtable存储

在这里插入图片描述

entry节点会记录当前节点上个节点的长度和当前节点长度等信息。
为什么叫压缩链表呢,因为链表中我们一般常用pre,next指针来指明当前的结点的前一个指针或当前的结点的下一个指针,这其实是在一定程度上占据了比较多的内存空间,因为实际的存储数据的大小可能还没有指针占用的内存大,所以ziplist采用了长度的表示方法,通过上下推算来获取元素位置。整个ziplist其实是超级长的字符串,通过里面各个结点的长度和上一个结点的长度等信息,通过快速定位实现相关操作,而且编写者,在长度上也做了动态分配字节的方法,表示长度,避免了一定的内存耗费,比如一个结点的字符串长度每个都很短,而你使用好几个字节表示字符串的长度,显然造成大量浪费,所以在长度表示方面,ziplist 就做到了压缩,也体现了压缩的性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值