Redis的设计与实现-读书笔记(二)

文章目录

  • 整数集合
    • 整数集合的实现
    • 整数集合的升级
  • 压缩列表
    • 压缩列表的构成
    • 连锁更新

整数集合

当集合元素全是整数并且数量不多时,redis就会选择整数集合作为底层实现

整数集合的实现

typedef struct intset{
	uint32_t encoding; //编码方式
	uint32_t length; // 集合元素数量
	int8_t contents[];根据encoding选择类型 16,32,64位
}intset;

整数集合的升级

出现当前类型无法存储的数字时,直接将所有元素升级

升级可以节约内存 和 提升灵活性

无法降级

压缩列表

压缩列表是是由连续内存块组成的顺序数据结构 ,当列表和哈希的元素内容要么是小整数或短字符串时,ziplist就回成为两者的底层实现

压缩列表的构成

zlbytes ztail allen entry1 entry2 … zlend
总内存 首尾 节点数 节点 节点2 结尾

entry的组成:
preLength encoding content

遍历时从后往前 根据preLength来确定位置就可以了

连锁更新

靠前的节点的preLength变大,导致后面的存储不下,也变大, 不断向后发生这样的过程

因为前一节点长度小于等于254字节时 preLength占1字节
大于时 占5字节 第一个字节作为标志位

你可能感兴趣的:(redis)