集合(set) 类型也是用来保存多个的字符串元素, 但和列表类型不一样的是, 集合中不允许有重复元素, 并且集合中的元素是无序的, 不能通过索引下标获取元素
一个集合最多可以存储232-1个元素。
Redis除了支持集合内的增删改查,同时还支持多个集合取交集、 并集、 差集,合理地使用好集合类型,能在实际开发中解决很多实际问题
常用命令
添加元素 sadd key element [element ...] 删除元素 srem key element [element ...] 计算元素个数 scard key 注:scard的时间复杂度为O(1),它不会遍历集合所有元素, 而是直接用Redis内部的变量 判断元素是否在集合中 sismember key element 如果给定元素element在集合内返回1, 反之返回0 随机从集合返回指定个数元素 srandmember key [count] [count]是可选参数, 如果不写默认为1 从集合随机弹出元素 spop key [count] 注:srandmember和spop都是随机从集合选出元素, 两者不同的是spop命令执行后, 元素会从集合中删除, 而srandmember不会。 获取所有元素 smembers key 注:smembers和lrange、 hgetall都属于比较重的命令, 如果元素过多存在阻塞Redis的可能性, 这时候可以使用sscan来完成 求多个集合的交集 sinter key [key ...] 求多个集合的并集 suinon key [key ...] 求多个集合的差集 sdiff key [key ...] 将交集、 并集、 差集的结果保存 sinterstore destination key [key ...] suionstore destination key [key ...] sdiffstore destination key [key ...]
命令复杂度
内部编码
集合类型的内部编码有两种: ·intset(整数集合) : 当集合中的元素都是整数且元素个数小于set-maxintset-entries配置(默认512个) 时,Redis会选用intset来作为集合的内部实现, 从而减少内存的使用。 ·hashtable(哈希表) : 当集合类型无法满足intset的条件时, Redis会使用hashtable作为集合的内部实现。
使用场景
集合类型比较典型的使用场景是标签(tag)
集合类型的应用场景通常为以下几种:
·sadd=Tagging(标签) ·spop/srandmember=Random item(生成随机数, 比如抽奖) ·sadd+sinter=Social Graph(社交需求)
原文:https://www.cnblogs.com/MacoLee/p/13960078.html