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|个元素,这些元素有可能相同。