1. 跳跃表是有序集合(zset)的底层实现之一;

2. 由zskiplist和zskiplistNode组成;

3. 每个跳跃表节点的层数都是1-32之间的随机数(每创建一个节点的时候,程序会随机生成一个数[1-32]作为level数组的大小);

4. 同一个跳跃表中,多个节点可以包含相同的分值,但节点的成员对象是唯一的;

5. 按分值排序,若分值相同就按成员对象大小排序。

zskiplist数据结构

typedef struct zskiplist {
//头节点和尾节点
struct zskiplistNode *header, *tail; //节点数量
unsigned long length; //表中节点最大层数
int level;
} zskiplist;

zskiplistNode 数据结构

typedef struct zskiplistNode {
//层
struct zskiplistLevel {
//前进指针
struct zskiplistNode *forward;
//跨度
unsigned int span;
} level []; //后退指针
struct zskiplistNode *backward;
//分值
double score;
//成员对象
robj *obj;
} zskiplistNode;

1. 前进指针(leve[i].forward)用于表头向表尾方向访问节点。

2. 跨度(level[i].span)记录两个节点之间的关系。

3. 后退指针(backward)用于表尾向表头方向访问节点,每次只能后退一个节点。

4. 分值(score),表中的节点按分值大小排序。

5. 成员对象(obj)是一个指针,指向一个SDS对象。

最新文章

  1. const extern static 终极指南
  2. UI-切圆角、透明度、取消按钮点击高亮效果、按钮文字带下划线
  3. PHP Fatal error: Class 'DOMDocument' not found
  4. Javascript 技巧集(1)
  5. ssh/openssh
  6. Hibernate SQL Dialect 方言
  7. MSSQL数据库索引的应用
  8. [原创]java WEB学习笔记97:Spring学习---Spring 中的 Bean 配置:IOC 和 DI
  9. MinGW编译wxWidgets中的问题及解决方法
  10. 如何判断Android设备是手机还是平板?
  11. C#中异步和多线程的区别
  12. Qt全局热键(windows篇)
  13. MEMS加速度计工作原理
  14. Glue4Net简单部署基于win服务的Socket程序
  15. 浅谈stream数据流
  16. NoSQL入门
  17. org.activiti.engine.activitiexception:version of activiti database(5.22) is more recent than the engine(5.12)
  18. MySQL写入用户微信名
  19. VirtualBox虚拟机怎么导入已经存在的vdi文件
  20. git bash 出现vim弹框的时候怎么退出

热门文章

  1. String类型 在底层剖析,并比较 与StringBuilding 的区别
  2. 【Error】安装程序无法打开注册表项 UNKNOWN\Components\...
  3. SQL学习笔记之MySQL中真假“utf8” 问题
  4. 20145211《网络渗透》MS12-004漏洞渗透
  5. C语言string.h常用函数总结
  6. Jquery9 事件对象
  7. windows环境下mysql的解压安装以及备份和还原
  8. Graph_Master(连通分量_G_Trajan+Thought)
  9. apache配置ssl
  10. QT 样式表基础知识