集合对象的编码可以是intset或者字典。
对象中不同类型的适用条件:
只有同时满足以下两个条件时才会使用intset编码:
- 集合对象保存的所有元素都是整数值;
- 集合对象保存的元素数量不超过512个;
当intset编码的对象有任意条件不符合时就会转换成字典编码。
通过以下操作验证:
127.0.0.1:6379> sadd num 1 3 5
(integer) 3
127.0.0.1:6379> object encoding num
"intset"
127.0.0.1:6379> sadd num "six"
(integer) 1
127.0.0.1:6379> object encoding num
"hashtable"
127.0.0.1:6379> eval "for i=1, 512 do redis.call('sadd', KEYS[1], i) end" 1 integers
(nil)
127.0.0.1:6379> scard integers
(integer) 512
127.0.0.1:6379> object encoding integers
"intset"
127.0.0.1:6379> sadd integers 10086
(integer) 1
127.0.0.1:6379> scard integers
(integer) 513
127.0.0.1:6379> object encoding integers
"hashtable"
对象类型的结构图
-
整数集合编码类型
整数集合对象.PNG
-
字典编码类型
字典对象.PNG
网友评论