[redis] zset数据结构 - Go语言中文社区

[redis] zset数据结构


一、描述

redis其中一个数据结构为zset(sorted set-有序集合),其主要作用用于排行榜实现,你可以获取排名第几到第几的数据


二、数据结构

sorted set-有序集合在redis中有两种实现

1.ziplist,压缩双向链表,相关链接

2.skiplist,跳表实现


三、skiplist数据结构


score:分值,用于排序

backward:是第一层的前一个数据,即span=1

level[]:每一个层所代表的节点node

forward:该层级的下一个节点

span:到达该层级的下一个节点,实际跨越了多少个节点,也是方便用于zrange等排行榜查询的用处


四、注意点

4.1 插入数据

1.在插入数据的时候,通过level[]快速跳过不需要比较的节点,快速定位节点位置

2.在插入新的节点的时候,level[]的层级由随机决定该层级的高度

3.然后更新每一次受到影响的span,span代表该层节点到达下一节点应该要跨越的节点数量


4.2 查询排行榜,如zrange

1.先根据start,通过level[]和每一次的rank来快速定位第一层的起始位置

2.然后再根据end,来将结果输出给用户


五、参数控制

redis配置文件中用来控制zset到底是使用ziplist(压缩双向链表)还是skiplist(跳表)的参数:

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

zset-max-ziplist-entries zset使用ziplist存储的时候,最大限制存储entries的个数

zset-max-ziplist-value zset使用ziplist存储的时候,每个节点最大存储字节数

违反上述两个限制条件,均会导致zset将ziplist的数据结构切换为skiplist数据结构

而zset使用ziplist的原因,主要是出于在零散数据量少的时候,节省内容的占用


版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_16097611/article/details/79939748
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-14 20:58:33
  • 阅读 ( 1263 )
  • 分类:Redis

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢