关于redis:redis学习之十集合对象

39次阅读

共计 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:

  1. 保留的所有元素都是整数。
  2. 只在的元素数量不超过 512 个(能够通过 set-max-intset-entries 配置进行调整)

当执行了上面命令后:

redis> SADD numbers 1 3 5 
(integer) 3

上面是 intset 编码存储的格局:

当执行了上面命令后:

redis> SADD test "apple" "cherry" "yes"
(integer) 3

上面是 hashtable 编码存储的格局:

参考的文章有:
黄健宏的《Redis 设计与实现》一书

正文完
 0