集合也是用来保存多个的字符串元素
image.png
集合特点
- 集合中不允许有重复元素
- 集合中的元素是无序的
- 不能通过索引下标获取元素
个元素。
redis 支持集合内的增删改查,同时也支持多个集合取交集、并集、差集。
命令
集合内操作
- 添加元素
sadd key element [element ...] - 删除元素
srem key element [element ...] - 计算元素个数
scard key时间复杂度为O(1) , 不会遍历集合所有元素,而是直接使用redis的内部变量 - 判断元素是否在集合中
sismember key element - 随机从集合中返回指定个数的元素
srandmember key [count]不写count,默认数量是1 - 从集合随机弹出元素
spop key [count] - 获取所有元素
smembers key
spop 和 srandmember的区别
| 相同点 | 不同点 |
|---|---|
| 都是随机从集合中选出元素 |
spop命令执行后,元素会从集合中删除,而srandmember不会 |
注意
smembers和lrange、hgetall 都是属于比较重的命令,如果元素过多,会存在阻塞Redis的可能性。这时候可以使用sscan来完成。
集合间操作
- 求多个集合的交集
sinter key [key ...] - 求多个集合的并集
sunion key [key ...] - 求多个集合的差集
sdiff key [key ...] - 将交集、并集、差集的结果保存
sinterstore destination key [key ...]
sunionstore destination key [key ...]
sdiffstore destionation key [key ...]
内部编码
- intset (整数集合) 当集合中的元素都是整数且小于配置set- max- intset- entries时
- hashtable (哈希表)
使用场景
- sadd = Tagging (标签)
- spop/srandmember = Random item (生成随机数 ,比如抽奖)
- sadd + sinter = Social Graph (社交需求)









网友评论