Set对象的底层编码

Redis对象层

Posted by 冯伟源 on May 18, 2015

SET对象的底层编码

  • SET对象的底层编码可以是intset或者dict;

1. 使用intset做底层实现

image

2. 使用dict做底层实现

image

3. 编码转换

  • 当集合对象可以同时满足下面两个条件时,使用intset编码,否则使用hashtable编码。
    • 集合对象保存的所有元素都是整数;
    • 集合对象保存的元素数量不超过512个;
    • redis.conf可以改条件
      # 集合对象使用ziplist编码,保存的元素超过多少个,就会转为hashtable编码
      set-max-intset-entries 512
      
sadd number 1 3 5
object encoding number    #intset
sadd number seven
object encoding number   #hashtable

4. SET对象在不同编码下对命令的处理逻辑

image

image