Redis-set集合
目录
1.介绍:
2.普通命令:
sadd:
smembers:
sismember:
scard:
spop:
smove:
srem:
3,集合间的操作
sinter:
sinterstore:
sunion:
sunionstore:
sdiff:
sdiffstore:
4.内部编码:
5.应用场景:
1.使用set来保存用户的“标签”(用户画像)
2.使用set来计算用户之间的共同好友
3.使用set统计UV
1.介绍:
集合类型用来保持多个字符串类型的元素,但和列表不同的是,集合中的元素是无需的,且元素不允许重复。
集合还支持交集,并集,差集,合理的利用集合可以在开发中解决很多问题。
2.普通命令:
sadd:
作用:将一个或多个元素添加到set中,(无法添加重复的元素)
语法:sadd key member [member,...]
时间复杂度:O(1)
返回值:本次添加成功的元素个数
eg:
smembers:
作用:获取set中的所有元素(无序的)
语法:smembers key
时间复杂度:O(1)
返回值:key中所有元素的列表
eg:
sismember:
作用:判断某个元素是否在集合中
语法:smembers key
时间复杂度:O(1)
返回值:1:表示元素在集合中,0:元素不在集合中或集合不存在
eg:
scard:
作用:获取set中元素的个数
语法:scard key
时间复杂度:O(1)
返回值:set中元素的个数
eg:s1中有元素:1 2 3 4 5 6 ,s2集合不存在
spop:
作用:从set中删除并返回一个或多个元素,(由于set是无序的,因此删除哪个元素也是随机的)
语法:spop key [count] (count:删除元素的个数)
时间复杂度:O(1)
返回值:删除的元素
eg:
smove:
作用:将set1中的一个元素取出放到set2中
语法:smove set1 set2 member
时间复杂度:O(1)
返回值:1:表示移动成功,0:移动失败
eg: s1:2 4 s2 :3 4 5 6,将s1中的2移到s2中
执行失败:
srem:
作用:将指定的元素从set中删除
语法:srem key member [member,....]
时间复杂度:O(1)
返回值:本次操作删除元素的个数
eg: 将2从s2中删除,执行成功,返回1:
再次删除时,执行失败,返回0
3,集合间的操作
交集,并集,差集是集合间的操作。
交集:两个或多个集合共同存在的元素。
并集:两个或多个集合所有的元素。
差集:A与B的差集:A集合存在,而B集合不存在的元素;
B与A的差集:B集合存在,而A集合不存在的元素;
sinter:
作用:获取给定set的交集中的元素
语法:sinter key1 key2 [key3,...]
时间复杂度:O(N*M),N是最小集合元素个数,M是最大集合元素个数
返回值:交集的元素
eg:对s1和s2执行交集操作:
当交集中有一个集合不存在或为空时,返回为一个空集:
sinterstore:
作用:获取给定set的交集中的元素,并保存到key中
语法:sinterstore key key1 key2 [key3,...]
时间复杂度:O(N*M),N是最小集合元素个数,M是最大集合元素个数
返回值:交集的元素个数
eg:
sunion:
作用:获取给定set的并集中的元素
语法:sunion key1 key2 [key3,...]
时间复杂度:O(N)给定所有集合总的元素个数
返回值: 并集的元素
eg:求s1和s2的并集:
当有个一集合为空或不存在时,返回的是另一个存在集合中的元素:
s1:1 2 3, s3为空集
sunionstore:
作用:获取给定set的并集中的元素,并将其保存到key中
语法:sunionstore key key1 key2 [key3,...]
时间复杂度:O(N)给定所有集合总的元素个数
返回值: 并集的元素个数
与一个空集和求并集:
sdiff:
作用:获取给定set的差集中的元素
语法:sdiff key [key,...]
时间复杂度:O(N)N:给定所有集合总的元素个数
返回值: 差集的元素
分别求s1与s2的差集和s2与s1的差集:
sdiffstore:
作用:获取给定set的差集中的元素,并将其保存到key中
语法:sdiffstore key key1 [key3,...]
时间复杂度:O(N)给定所有集合总的元素个数
返回值: 差集的元素个数
eg:
4.内部编码:
集合类型的内部编码有两种:intset(整数集合),hashtable(哈希表)
1.当元素都为整数,并且元素个数<512个时,内部编码为intset;
2.当元素个数>512,内部编码为hashtable;
3.当存在元素不是整数时,内部编码为hashtable;
查看任意类型元素内部编码的命令为:object encoding 值
s1中的元素为:1 2 3 ,后又加上aa,分别查看内部编码:
5.应用场景:
1.使用set来保存用户的“标签”(用户画像)
现在各种软件都有推送的功能,推送的内容都是我们想要看的,或者是最近经常搜索的.....
这是由于软件后台在监控我们的数据信息。通过信息收集,分析出个人特征,再“投其所好”。
由于set元素具有不重复的特性,就可以用来保存用户的信息。
2.使用set来计算用户之间的共同好友
使用set的交集来获取不同用户之间的共同好友,进而将其推送给另一个人。
3.使用set统计UV
一个互联网产品,如何衡量其用户规模?
主要有两个指标:
1.PV: page view:用户每次访问一下该服务器,就会产生一个pv
2.UV:user view :每个用户访问浏览器都会产生一个pv,但是同一个用户多次访问,不会使uv增加,uv会按照用户进行去重.