引言
本文对Redis中的有序集合部分源代码进行分析(基于Redis3.2.0源码)
skiplist参考资料(A Skip List Cookbook):
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.17.524&rep=rep1&type=pdf
源码分析
Redis中有序集合的底层实现是skiplist和ziplist,在server.h中,相关的两个有序集合如下:
t_zset.c是对redis有序集合的具体实现,代码以及注释如下
|
|
总结
Redis中的跳表实现跟一般教科书上的跳表实现基本相同,有一点不同的是Redis在skiplist的节点中加入了backward属性,来记录上一个节点的地址,由此跳表的节点与节点间便变成了一个双向链表,这样做在方便节点的插入删除操作的同时,又帮助实现了诸如ZREVRANGE这样的指令。
能力有限,难免有分析不周全或分析错误的地方,如发现望指出,大家一起学习交流。