Redis学习——day2

1.Redis6.0之后,压缩列表不再是ziplist而是listpack,如下:

RPUSH testlist 1 2 3 "test"
> 4

OBJECT ENCODING testlist
> listpack

这是因为 ziplist 具有性能瓶颈,ziplist 的结构体保存了上一个数据所占的大小,而在新的 listpack 中,结构体不再保存上一个数据所占的大小,而是保存自身大小。

2.Redis 在保存整数集合时,使用的底层结构是 intset,顾名思义,保存的是无重复的整形数据。intset 包含当前值的集合,当前值的长度,以及当前值的编码类型,一共有16、32、64三种编码类型。这可以保证在存储时,根据存储数据的大小,来选用合适的编码类型,最大化的减少空间浪费。
同时 intset 有升级(upgrade)机制,如果目前存的编码类型是16位大小,这时候存入一个比如说42767,那么编码类型就会升级为32位,同时为了保证 intset 的大小顺序性,存的数据也会进行位置移动,这个时间复杂度为 O(n)。注意的是,只有升级,没有降级,也就是说,如果存入的是1,2,3,4,42767。突然42767被移除了,也不会降级为16位,这应该是防止频繁升级带来的位置移动造成的性能损耗。技术没有银弹,个人觉得Redis的这个设计已经很棒了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值