今天看啥  ›  专栏  ›  gzss

redis集合类型(set)

gzss  · 简书  ·  · 2019-07-04 22:06

redis集合中的每个元素都是不同的,且没有顺序,一个集合类型(set)键可以至多存储2^32 -1个字符串。集合类型和列表类型有相似之处,但是也很容易将他们区分开来,比如他们存储内容都是2^32 -1个字符串,列表类型是有序的而集合类型不是,集合类型的键是唯一的而列表类型不是。

集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,由于集合类型在Redis内部使用的使散列表(hash table)实现的,所以这些操作的时间复杂度都是O(1)。最方便的使多个集合类型键之间还可以进行并集、交集和差集运算。

命令:
1、增加\删除元素

SADD key member [member ...]

SREM key member [member ...]

SADD命令用来向集合中增加一个或多个元素,如果键不存在则会自动创建。因为在一个集合中不能有相同的元素,所以如果要加入的元素已经存在于集合中就会忽略这个元素。此命令返回的使成功加入的元素个数。

SREM命令用来从集合中删除一个或多个元素,并返回删除成功的个数。

2、获得集合中的所有元素

SMEMBERS key

此命令返回集合中的所有元素。慎用

3、判断元素是否在集合中

SISMEMBER key member

判断一个元素是否在集合中是一个时间复杂度为O(1)的操作,无论集合中有多少个元素,SISMEMBER命令始终可以极快的返回结果。当值存在是返回1,值不存在或者键不存在时返回0.

4、集合运算

SDIFF key [key ...]

SINTER key [key ...]

SUNION key [key ..]

SDIFF命令用来对多个集合执行差集原酸。集合A与B的差集表示A-B,代表所有属于A且不属于B的元素构成的集合。此命令支持同事传入多个键,例如A\B\C计算顺序是先计算A-B ,在计算之前结果与C的差集。

SINTER命令是用来对多个集合执行交集运算,例如集合A与B交集表示属于A且属于B的元素构成的集合,同样的此命令也支持传入多个键,计算同时属于这些键的元素。

SUNION命令用来对多个集合执行并集运算,例如集合A与B并集原酸表示属于A或者属于B的元素构成的集合。

5、获得集合中元素个数

SCARD key 计算集合中元素的个数,返回数量。

6、进行集合运算并将结果存储

SDIFFSTORE destination key [key ...]

SINTERSTORE destination key [key ...]

SUNIONSTORE destination key [key ...]

以上三个命令计算方式跟集合的运算一致,唯一的区别就是不会直接返回结果,而是将结果存储在destination键中。

7、随机获得集合中的元素

SRANDMEMBER key [count]

此命令用来随机从集合中获取一个或多个元素(count),根据count的不同(正负),具体表现也不相同:

1)当count为正数时,SRANDMEMBER会随机从集合里获取count个不重复的元素,如果count大于集合中的元素个数时,则会返回集合中的全部元素。

2)当count为负数时,SRANDMEMBER会随机从及合理获得|count|个元素,这些元素有可能相同。




原文地址:访问原文地址
快照地址: 访问文章快照