Redis使用篇 - 集合对象

集合对象

一个集合对象最多存储2^32 - 1个元素。集合元素不重复。

.

编码

集合对象的编码方式:intsethashtable

.

intset

intset编码的集合对象底层使用整数集合作为底层实现。集合对象的所有元素都被保存到整数集合中。

Redis使用篇 - 集合对象

.

hashtable

hashtable编码的集合对象使用字典作为底层实现。字典每个键都是一个字符串对象,每个字符串对象保存了一个集合元素,字典的值全部都设置为null。

Redis使用篇 - 集合对象

.

编码转换

同时满足以下两个条件时,编码是intset。

  • 集合中的所有元素都是整数。
  • 集合中的元素的数量小于等于512个。(set-max-intset-entries)

否则使用hashtable编码。
.

应用场景

参考文章

Redis使用篇 - 集合对象
可能认识的人:sdiff。

Redis使用篇 - 集合对象

Redis使用篇 - 集合对象

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是指定元素的数量。