Redis集合对象

一. 编码

        集合对象的编码可以是intset或者hashtable。

        intset编码的集合对象使用整数集合作为底层实现,集合对象包含的所有元素都保存在整数集合里面。

127.0.0.1:6379> sadd numbers 1 3 5
(integer) 3
127.0.0.1:6379> object encoding numbers
"intset"

Redis集合对象_第1张图片

        hashtable编码的集合对象使用字典作为底层实现,字典的每一个键都是一个字符串对象,每一个字符串对象包含了一个集合元素,而字典的值全部被置为NULL。

127.0.0.1:6379> sadd fruits 'cherry' 'apple' 'banana'
(integer) 3
127.0.0.1:6379> object encoding fruits
"hashtable"

Redis集合对象_第2张图片

 

二. 编码转换

        当一个集合对象同时满足下面两个条件时,使用intset编码:

  • 集合对象保存的所有元素都是整数值
  • 集合对象保存的元素数量不超过512个

        不满足时使用hashtable编码。也就是如果一开始使用的是intset作为集合对象的底层实现,当下面两个条件其中一个不满足时,集合对象会执行编码转化操作,将保存在整数集合中的元素转移到字典中,编码修改成hashtable。

        注意:第二个条件的上限值是可以修改的,具体看配置文件中的set-max-intset-entries选项说明。

三.集合命令实现

Redis集合对象_第3张图片

你可能感兴趣的:(Redis,redis)