目录
集合( set)类型也是用来保存多个的字符串元素,但和列表类型不一样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引下标获取元素。
一个集合最多可以存储2的32次方 -1个元素。Redis除了支持集合内的增删改查,同时还支持多个集合取交集、并集、差集,合理地使用好集合类型,能在实际开发中解决很多问题。
1、set 操作命令
1-1、sadd、smembers 命令
# 允许添加多个,返回结果为添加成功的元素个数
sadd key member [member ...]
# 返回结果是无序的
smembers key
1-2、srem 命令
# 允许删除多个,返回结果为成功删除元素个数
srem key member [member ...]
1-3、scard、sismember 命令
# 计算元素个数
scard key
# 如果给定元素在集合内返回1,反之返回0
sismember key member
1-4、srandmember、spop 命令
# 随机从集合返回指定个数元素,指定个数如果不写默认为1
srandmember key [count]
# 同样可以指定个数,如果不写默认为1,注意,既然是弹出,spop命令执行后,元素会从集合中删除,而srandmember不会。
spop key [count]
2、Set 集合间操作命令
现在有两个集合,它们分别是set1和set2
2-1、sinter 命令
# 求多个集合的交集
sinter key [key ...]
2-2、suinon 命令
# 求多个集合的并集
sunion key [key ...]
2-3、sdiff 命令
# 求多个集合的差集,以第一个key的差集返回
sdiff key [key ...]
2-4、将交集、并集、差集的结果保存
集合间的运算在元素较多的情况下会比较耗时,所以 Redis提供了三个命令(原命令+store)
将集合间交集、并集、差集的结果保存在 destination key 中
# 交集
sinterstore destination key [key ...]
# 并集
sunionstore destination key [key ...]
# 差集
sdiffstore destination key [key ...]
3、使用场景
集合类型比较典型的使用场景是标签(tag)
- 例如一个用户可能对娱乐、体育比较感兴趣,另一个用户可能对历史、新闻比较感兴趣,这些兴趣点就是标签。有了这些数据就可以得到喜欢同一个标签的人,以及用户的共同喜好的标签,这些数据对于用户体验以及增强用户黏度比较重要。
- 例如一个电子商务的网站会对不同标签的用户做不同类型的推荐,比如对数码产品比较感兴趣的人,在各个页面或者通过邮件的形式给他们推荐最新的数码产品,通常会为网站带来更多的利益。
- 除此之外,集合还可以通过生成随机数进行比如抽奖活动,以及社交图谱等等。