集合
2019-07-11 本文已影响0人
lookphp
集合也是用来保存多个的字符串元素
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 (社交需求)