关于redis:redis学习之八列表对象

2次阅读

共计 554 个字符,预计需要花费 2 分钟才能阅读完成。

之前相关联的文章:
redis 学习之一 SDS
redis 学习之二双端链表
redis 学习之三字典
redis 学习之四 skiplist
redis 学习之五 ziplist
redis 学习之六对象
redis 学习之七字符串对象

先再看一下 redisObject 的定义:

typedef struct redisObject{

// 类型
unsigned type:4;
// 编码
unsigned encoding:4;
//lru 缓存淘汰机制信息
unsigned lru:LRU_BITS;
// 援用计数器
int refcount;
// 指向底层实现数据结构的指针
void *ptr;

}robj;
字符串对象的编码能够是 zilist 或 linkedlist。
编码的转换规则,当列表同时满足上面两个条件时应用 ziplist 编码,不满足则应用 linkedlist。

  1. 列表对象保留的所有字符串元素长度都小于 64 字节。
  2. 列表对象保留的元素数量小于 512 个。

当执行了如此命令时:

redis> RPUSH numbers 1 "three" 5
(integer) 3

应用 ziplist 编码的示意图:

应用 linkedlist 编码的示意图:

参考的文章有:
黄健宏的《Redis 设计与实现》一书
须要阐明下的是这里的 stringObject 作了简化,格局能够参看 redis 学习之七字符串对象里的内容。

正文完
 0