Set有很多种含义,比如集合,比如设置(和get相对应)。
在这里我们说的set是指的redis中的集合,并且这里的集合是无序的,和之前的list是对应的。
- List : [1,2,3] 和 [2,1,3] 是两个不同的list
- Set : [1,2,3] 和 [2,1,3] 是两个相同的集合
目录
基本操作
SADD SMEMBERS SISMEMBER
SADD:添加元素到集合中
SMEMBERS:查询集合的元素
SISMEMBER:查询某个元素是否在集合中。
SADD key member [member ...]
SMEMBERS key
SISMEMBER key
把集合中的元素叫做member,并且当出现重复的元素的时候,只算同一个元素。
SPOP
SPOP key [count]
不写count的时候,就是随机删除一个,写的时候就是写几个删除几个。并且删除的时候是随机删除元素,跟插入的顺序没有关系。
SMOVE
SMOVE source destination member
把member从source上删除,再插入到destination中。
如果要移动的数字在destination中已经有了,那么仍然会按照删除再插入的操作进行,但是插入会不会有效果。
如果要移动的数字在source中没有,会操作失败。
SREM
可以一次删除一个member,也可以一次删除多个member
SREM key member [member...]
交集、并集、差集
SINTER
求交集
SINTER key [key ...]
此处的每个key都对应一个集合,返回值就是最终交集的数据。
SINTERSTORE
直接把算好的交集,放到destination这个key对应的集合中了。
SINTERSTORE destination key [key ...]
SUNION
求并集
SUNION key [key ...]
SUNIONSTORE
和上面的一样,把并集储存到destination中。
SDIFF
求差集
SDIFF key [key ...]
返回值是差集的个数。
SDIFFSTORE
和上面的一样,把差集存储到destination中。
总结:
命令 | 时间复杂度 |
---|---|
SADD key element[element...] | O(k), k是元素个数 |
SREM key element[element...] | O(k), k是元素个数 |
SCARD key | O(1) |
SISMEMBER key element | O(1) |
SRANDMEMBER key[count] | O(n), n是count |
SPOP key[count] | O(n), n是count |
SMEMBERS key | O(k), k是元素个数 |
SINTER key[key...] SINTERSTORE | O(m*k), k是几个集合中元素最小的个数, m是 |
SUNION key[key...] SUNIONSTORE | O(k), k是多个集合的元素个数总和 |
SDIFF key[key...] SDIFFSTORE | O(k), k是多个集合的元素个数总和 |
Set的应用场景
- 使用Set来保存用户的“标签”
- 使用Set来计算用户之间的共同好友
- 使用Set统计UV(去重)