文章目录
一、命令
1.集合内操作
(1)添加元素
sadd key element [element...] 返回结果为成功添加的元素个数
(2)删除元素
srem key element [element...] 返回结果为成功删除元素个数
(3)计算元素个数
scard key 时间复杂度为O(1) 它并不会遍历set的所有元素,而是直接使用Redis内部的变量
(4)判断元素是否在集合中
sismember key element
如果给定元素element在集合内返回1 否则返回0
(5)随机从集合返回指定个数的元素
srandmember key [count]
[count]是可选参数,如果不写,默认为1
(6)从集合随机弹出元素
spop key [count]
spop操作可以从集合中随机弹出[count] 个元素,默认弹出一个
srandmember spop的不同之处,是spop在取出元素后,会删除原集合中的元素
(7)获取所有元素
smembers key
返回结果是无序的
smembers lrange hgetall 都属于比较重的命令,如果元素过多,存在阻塞Redis的可能性
2.集合间操作
(1)求多个集合的交集
sinter key [key...]
(2)求多个集合的并集
suinon key [key...]
(3)求多个集合的差集
sdiff key [key...]
(4)将交并差的结果保存
sinterstore destination key [key...]
suionstore destination key [key...]
sdiffstore destination key [key...]
集合间的运算在元素较多的情况下会比较耗时,所以Redis提供了上面三个命令(原命令+store),将集合的交并差结果保存在destination中
二、内部编码
- 一个集合最多可以存储2E32-1个元素
1.intset(整数集合)
- 当集合中的元素都是整数且元素个数小于set-max-intset-entries配置(默认512个)时,Redis会选用intset作为集合的内部实现,从而减少内存的使用
2.hashtable(哈希表)
- 当集合类型无法满足intset的条件时,Redis会使用hashtable作为集合的内部实现
三、使用场景
1.标签
比如csdn文章发布的表签,可以使用set存储,这样可以根据这个表签找到相似的文章来推送