标签:redis class str 版本 col src style node byte
大纲:
一、双向链表-list
redis早期版本处理list用的就是双向链表
struct listNode{ struct listNode *prev; //前一个节点 struct listNode *nenxt; //下一个节点 void *value;//节点的值 } struct list { listNode *head; //头节点 listNode *tail; //头节点 long len;//节点数量 }
二、压缩表-ziplist
2.1ziplist组成
2.2entry的组成
data就是实际存放的数据
prelength是前节点的大小,也是用与反向遍历的,如果前节点小于254字节,则entry中prelength占用1个字节来记录,如果大于等于254,prelength占用5个字节,第一字节固定254,后4个字节表示大小
encoding用于表示data存储的数据类型和数据大小
最后1111xxxx表示超小数0-12。0000,1110,1111被占掉了,xxxx可以表示1-13,实际表示的值再-1。
上图中pppqqqrrrsssttt都是用来表示字符串大小的
三、快速表-quicklist
标签:redis class str 版本 col src style node byte
原文地址:https://www.cnblogs.com/liuboyuan/p/14720096.html