共计 580 个字符,预计需要花费 2 分钟才能阅读完成。
之前相关联的文章:
redis 学习之一 SDS
redis 学习之二双端链表
redis 学习之三字典
redis 学习之四 skiplist
redis 学习之五 ziplist
redis 学习之六对象
redis 学习之七字符串对象
redis 学习之八列表对象
redis 学习之九哈希对象
先再看一下 redisObject 的定义:
typedef struct redisObject{ | |
// 类型 | |
unsigned type:4; | |
// 编码 | |
unsigned encoding:4; | |
//lru 缓存淘汰机制信息 | |
unsigned lru:LRU_BITS; | |
// 援用计数器 | |
int refcount; | |
// 指向底层实现数据结构的指针 | |
void *ptr; | |
}robj; |
汇合对象的编码能够是 intset 或 hashtable。当同时满足上面两个条件时会应用 intset,不满足时应用 hashtable:
- 保留的所有元素都是整数。
- 只在的元素数量不超过 512 个(能够通过 set-max-intset-entries 配置进行调整)
当执行了上面命令后:
redis> SADD numbers 1 3 5 | |
(integer) 3 |
上面是 intset 编码存储的格局:
当执行了上面命令后:
redis> SADD test "apple" "cherry" "yes" | |
(integer) 3 |
上面是 hashtable 编码存储的格局:
参考的文章有:
黄健宏的《Redis 设计与实现》一书
正文完