Redis数据类型之set
上篇文章:
Redis数据类型之listhttps://blog.csdn.net/sniper_fandc/article/details/149139713?fromshare=blogdetail&sharetype=blogdetail&sharerId=149139713&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link
目录
1 sadd、smembers和sismember
2 spop和srandmember
3 smove和srem
4 sinter和sinterstore
5 sunion和sunionstore
6 sdiff和sdiffstore
7 set的使用场景
set类型是集合,集合有两个重要的特性:1.集合中的元素不能重复。2.集合中的元素是无序的(一组数的所有排列的集合是同一个集合)。集合内部存储的是string类型,可以使用JSON格式来存储更复杂的string类型。
1 sadd、smembers和sismember
命令:sadd key member1 member2 ...
向key的集合中插入member1、member2等等元素。时间复杂度O(1),因为一般不会插入过多的元素,近似常数级时间复杂度。返回值插入成功的个数。
命令:smembers key
查询key的集合中的所有元素。时间复杂度O(N),N表示集合中元素的个数。返回值集合中的所有元素。
命令:sismember key member
判断member是否是key的集合中的元素。时间复杂度O(1)。返回值0表示不存在,1表示存在。
2 spop和srandmember
命令:spop key [count]
随机删除key的集合中的一个元素,如果带参数count,就删除count个。时间复杂度O(N),N表示count。返回值是删除的元素。
命令:srandmember key [count]
随机获取key的集合中的一个元素,如果带参数count,就获取count个。时间复杂度O(N),N表示count。返回值是获取的元素。
3 smove和srem
命令:smove source destination member
把source的集合中的member移动到destination的集合中。时间复杂度O(1)。返回值1或0,0表示要移动的元素不存在在source,1表示移动成功或member已经存在destination的集合中(此时该元素仍然会从)source的集合中移除。
命令:srem key member1 member2 ...
移除key的集合中的指定元素。时间复杂度O(N),N表示移除元素的个数。返回值也是成功移除元素的个数。
4 sinter和sinterstore
命令:sinter key1 key2 ...
求集合的交集。时间复杂度O(N*M),N是最小集合的大小,M是最大集合的大小。返回值是交集中的元素。
命令:sinterstore destination key1 key2 ...
求集合的交集,并把交集存储在destination键对应的集合中。时间复杂度O(N*M),N是最小集合的大小,M是最大集合的大小。返回值是交集中的元素个数。
5 sunion和sunionstore
命令:sunion key1 key2 ...
求集合的并集。时间复杂度O(N),N是所有集合的元素个数之和。返回值是并集中的元素。
命令:sunionstore destination key1 key2 ...
求集合的并集,并把并集存储在destination键对应的集合中。时间复杂度时间复杂度O(N),N是所有集合的元素个数之和。返回值是并集中的元素的个数。
6 sdiff和sdiffstore
命令:sdiff key1 key2 ...
求集合的差集(注意A对B的差集是A有B没有的元素,B对A的差集是B有A没有的元素)。时间复杂度O(N),N是所有集合的元素个数之和。返回值是差集中的元素。
命令:sdiffstore destination key1 key2 ...
求集合的差集,并把差集存储在destination键对应的集合中。时间复杂度O(N),N是所有集合的元素个数之和。返回值是差集中的元素的个数。
7 set的使用场景
set可以用来保存用户的标签,利用标签构建用户画像,从而进行按兴趣推荐等等。也可以计算两个用户标签的交集,从而得到用户之间的相似度,进而得到用户之间的关系。比如公共好友的计算。
用set还可以去重,尤其是对于网站访问量的统计:PV(page view每访问一次服务器PV+1)和UV(user view每有一个用户访问一次服务器UV+1)的统计。上述过程中UV就需要去重,因为一个用户多次访问服务器,UV只增加1个单位。
下篇文章: