集合(set) 类型也是用来保存多个的字符串元素,但和列表类型不一样的是,集合中不允许有重复的元素。(ps,如果重复了,一个集合下如何区分那个元素是那个元素呢?);并且集合中的元素是无序的,不能通过索引下标获取元素。一个集合最多可以存储2^32 -1 个元素。Redis除了支持集合的增删改查,同时还支持多个集合取交集,并集,差集。
基本命令:
1、添加元素,返回添加成功的个数
sadd key element [element ...]
2、删除元素
srem key element [element ...]
3、计算元素个数
scard key
4、 判断元素是否在集合中
sismember key element
5、随机从集合返回指定个数元素 ,count 如果不写,默认为1
srandmember key [count]
6、从集合随机弹出元素
spop key [count]
注:srandmember和spop都是从集合随机选出元素,不同的是,spop执行后会从集合中删除该元素。而srandmember不会删除该元素。
7、获取所有元素,返回结果无序
smembers key
集合间的操作
127.0.0.1:6379> sinterstore targerKey coll2 coll3
(integer) 25
内部编码
集合类型的内部编码有两种
intset(整数集合) 当集合中的元素都是整数且元素个数小于st-max-intet-entries配置(默认512个),redis会选用intset来作为集合的内部实现,二减少内存的使用
hashtable(哈希表) 当集合类型无法满足intset的条件时,redis会使用hashtable作为集合的内部实现。
使用场景
spop/srandmember =Random item (生成随机数,如抽奖)
sadd + sinter = Social Graph (社交,求共同兴趣爱好等)