Redis数据结构:跳跃表
2024-09-27 09:39:16
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对象。
最新文章
- const extern static 终极指南
- UI-切圆角、透明度、取消按钮点击高亮效果、按钮文字带下划线
- PHP Fatal error: Class 'DOMDocument' not found
- Javascript 技巧集(1)
- ssh/openssh
- Hibernate SQL Dialect 方言
- MSSQL数据库索引的应用
- [原创]java WEB学习笔记97:Spring学习---Spring 中的 Bean 配置:IOC 和 DI
- MinGW编译wxWidgets中的问题及解决方法
- 如何判断Android设备是手机还是平板?
- C#中异步和多线程的区别
- Qt全局热键(windows篇)
- MEMS加速度计工作原理
- Glue4Net简单部署基于win服务的Socket程序
- 浅谈stream数据流
- NoSQL入门
- org.activiti.engine.activitiexception:version of activiti database(5.22) is more recent than the engine(5.12)
- MySQL写入用户微信名
- VirtualBox虚拟机怎么导入已经存在的vdi文件
- git bash 出现vim弹框的时候怎么退出
热门文章
- String类型 在底层剖析,并比较 与StringBuilding 的区别
- 【Error】安装程序无法打开注册表项 UNKNOWN\Components\...
- SQL学习笔记之MySQL中真假“utf8” 问题
- 20145211《网络渗透》MS12-004漏洞渗透
- C语言string.h常用函数总结
- Jquery9 事件对象
- windows环境下mysql的解压安装以及备份和还原
- Graph_Master(连通分量_G_Trajan+Thought)
- apache配置ssl
- QT 样式表基础知识