码迷,mamicode.com
首页 > 其他好文 > 详细

redis数据结构-链表,压缩表,快速表

时间:2021-04-30 12:28:31      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:redis   class   str   版本   col   src   style   node   byte   

大纲:

  1. 双向链表-list
  2. 压缩表-ziplist
  3. 快速表-quicklist

 

一、双向链表-list

redis早期版本处理list用的就是双向链表

struct listNode{
    struct listNode *prev; //前一个节点
    struct listNode *nenxt; //下一个节点
    void *value;//节点的值
}

struct list {
    listNode *head; //头节点
    listNode *tail; //头节点
    long len;//节点数量
}

 

二、压缩表-ziplist

2.1ziplist组成

  • zlbytes: ziplist的大小(单位: 字节)
  • zltail: ziplist最后一个节点的偏移量,有ziplist守地址,有偏移量可以定位最后一个entry用于反向遍历
  • zllen: ziplist的节点(entry)个数
  • entry: 节点
  • zlend: 值为0xFF,ziplist的结尾

技术图片

 

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数据结构-链表,压缩表,快速表

标签:redis   class   str   版本   col   src   style   node   byte   

原文地址:https://www.cnblogs.com/liuboyuan/p/14720096.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!