redis数据类型之ZSet

ZSet 也就是 SortedSet ,其中每一个元素需要指定一个 score 值和一个 member 值:

         1.可以根据 score 值进行排序

          2.member 值必须唯一

          3.可以根据 member 查询分数

因此 ZSet 底层数据结构必须满足键值存储,键必须唯一,可排序这几个需求

1.SkipList:可以排序,并且可以同时存储 score 和 member 值

2.Dict:可以键值存储,并且可以根据 key 查询 value 

ZSet底层结构如下:

当元素数量不多时,Dict 和 SkipList 的优势并不明显,而且更耗内存。因此 ZSet 还会采用 ZipList 结构来节省内存,不过需要同时满足两个条件

        1.元素数量小于 zset_max_ziplist_entries,默认为 128

        2.每个元素都小于 zset_max_ziplist_value字节,默认为 64

ziplist 本身没有排序功能,而且没有键值对存储的概念,因此需要 zset 通过编码实现:

        1.ZipList 是连续内存,因此 score 和member 是紧挨在一起的两个 entry , member 在前,score 在后

        2.score 越小越接近队首,score 越大越接近队尾,按照 score 升序排列

使用ziplist的ZSet结构如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值