Redis使用篇 - 集合对象
集合对象
一个集合对象最多存储2^32 - 1个元素。集合元素不重复。
.
编码
集合对象的编码方式:intset、hashtable。
.
intset
intset编码的集合对象底层使用整数集合作为底层实现。集合对象的所有元素都被保存到整数集合中。
.
hashtable
hashtable编码的集合对象使用字典作为底层实现。字典每个键都是一个字符串对象,每个字符串对象保存了一个集合元素,字典的值全部都设置为null。
.
编码转换
同时满足以下两个条件时,编码是intset。
- 集合中的所有元素都是整数。
- 集合中的元素的数量小于等于512个。(set-max-intset-entries)
否则使用hashtable编码。
.
应用场景
可能认识的人:sdiff。
4.点赞、收藏、标签
sadd - 点赞。
srem - 取消点赞。
smembers - 所有点赞的人。
scard - 点赞的人数。
.
命令
-
sadd
作用:往集合中添加元素。
命令:sadd key value [value…]
时间复杂度:添加每个元素的时间复杂度为0(1)。添加n个元素的时间复杂度为0(n)。
-
scard
作用:集合中元素的数量。
命令:scard key
时间复杂度:0(1)。
-
sdiff
作用:取集合之间的差集。
命令:sdiff key [key…]
时间复杂度:0(n)。
-
sdiffstore
作用:取集合之间的差集,存储到目标集合中。(如果目标集合存在,进行覆盖)
命令:sdiffstore destination key [key…]
时间复杂度: 0(n)。
-
sinter
作用:取集合之间的交集。
命令:sinter key [key…]
时间复杂度:0(n)。
-
sinterstore
作用:取集合之间的交集,存储到目标集合中。(如果目标集合存在,进行覆盖)
命令:sinterstore key [key…]
时间复杂度:0(n)。
-
sismember
作用:判断元素是否在集合中。
命令:sismember key value
时间复杂度:0(1)。
-
smembers
作用:返回集合中的所有元素。
命令:smembers key
时间复杂度:0(n)。
-
smove
作用:移动源集合中的一个元素到目标集合中。
命令:smove sourceKey targetKey value
时间复杂度:0(1)。
-
spop
作用:随机移除并返回集合中指定数量的元素。
命令:spop key [count]
时间复杂度:0(n)。n为指定数量。
-
srandmember
作用:随机返回集合中的指定数量的元素。(如果count指定为负值,则可以返回多次相同的元素)
命令:srandmember key [count]
时间复杂度:0(n)。n为指定数量。
-
sunion
作用:取集合之间的并集。
命令:sunion key [key…]
时间复杂度:0(n)。
-
sunionstore
作用:取集合之间的并集,存储到目标集合中。(如果目标集合存在,进行覆盖)
命令:sunionstore key [key…]
时间复杂度:0(n)。
-
srem
作用:删除集合中的指定元素。
命令:srem key value [value…]
时间复杂度:0(n)。n是指定元素的数量。