Redis的Set类型
一.Set集合
set集合简单地说,就是把一些有关联的数据放到一起。
它还有一些特殊的性质:
- 例如集合中的元素是无序的,所谓的无序代表此时1,2,3和2,3,1是等价的。
- 集合中的元素是不能重复的(唯一的)。
二.Set集合的普通命令
1.SADD
添加元素
演示:
此时插入的元素都不是重复的,所以返回成功插入元素的个数:
如果此时插入的元素有重复的则返回个数就不是插入元素的个数:
2.SMEMBERS
获取set中的所有元素
演示:
3.SISMEMBER
判断元素是否存在
演示:
4.SPOP
随机删除,count不写就只删除1个,写了按照count的数值来进行删除
演示:
5.SMOVE
将一个元素源set中取出,放到目标set当中
演示:
注意:
如果key2中已经存在一个数值1,此时再将key1中的数值1,smove到key2中,此时key2不会发生变化,但是key1会将数值1进行删除:
6.SREM
删除一个或者多个指定元素
演示:
7.SINTER
获取给定set一个或者多个集合中的交集(集合中都有的元素)元素
演示:
8.SINTERSTORE
直接把算好的交集放在指定的key中
演示:
9.SUNION
给定set集合中求并集(将给定的set集合不重复的元素全部合在一起)的操作
演示:
10.SUNIONSTORE
算好并集的结果放到目标key中
演示:
11.SDIFF
给定set集合,求它们的差集(A和B集合的差集,就是A存在,B不存在的元素)元素
演示:
12.SIDFFSTORE
算好差集,再将这个集合放在指定key中
演示:
三.Set集合内部编码方式
1.intset(整数集合)
为了节省空间做出的优化,也就是当元素均为整数,并且元素个数不多时,使用intset进行存储:
2.hashtable(哈希表)
当内部元素过多或者有字符串时,就变成了hashtable来进行存储数据:
四.Set的应用场景
1.Set保存用户标签
最常用的方面就是用户画像,分析一个用户的特征后,在投其所好来进行推送这个用户所感兴趣的内容。
上述还会从搜索的历史记录等其他方面来进行分析一个用户的特征,这样就能够收集完用户的特征,这些特征也就转换成了用户的标签,并且把这些标签存在redis的set集合中。
2.Set计算用户之间的共同好友
基于集合求交集的操作可以体现在,现在使用的QQ上,举一个栗子:
你和你的好基友在一个班级上,你们都加了班级上的同学,此时QQ上就会显示共同好友有多少个。
还有一个推荐好友的栗子:
当我们进入大学之后,我们在QQ上肯定会加自己班级上的人,但是你加的同学,他可能是社团的人,他就可能加了社团里面的人(这些人和你不是一个班级也不是一个专业),此时QQ就会把你同学他在社团里面加的人推送给你。
3.Set统计UV
PV:page view
用户每次访问该服务器,每次同一个用户的访问都会产生一个pv。
UV:user view
每个用户访问服务器都会产生一个uv,但是相同的用户多次访问,不会使UV增加,此时就会需要进行去重操作,就可以使用set来实现。