概要
Set(集合),将一些有关联的数据放到一起,集合中的元素是无序的,并且集合中的元素是不能重复的
之前介绍的list就是有序的,对于列表来说[1, 2, 3] 和 [2, 1, 3]是两个不同的列表,而对于集合来说,[1, 2, 3] 和 [2, 1, 3]是同一个集合
并且,set类型和list类型类似,每个元素都是string类型的
sadd
向集合中添加一个或多个元素,返回成功添加了多少个元素,时间复杂度O(1)

演示:

smembers
获取set中全部的元素

sismember
判断当前元素是否在集合中,如果在返回1,如果不在返回0

演示:

scard
获取集合中元素的个数,如果key不存在则返回0

spop
随机删除集合中count个元素(不写count就是随机删除一个元素),返回删除的元素

演示:

官方文档中展示了,spop实现时采用了生成随机数的方式来随机删除
srandmember
和spop类似,随机获取元素,但是不删除

smove
把一个元素从source集合中取出来,放到destination集合中

演示:

如果source中移动的元素在destination中已经存在,source中的元素确实会删除,但是destination中并不会再次插入元素

如果source中不存在要移动的元素,则返回0

srem
删除集合中一个或多个元素,返回值是成功删除的元素个数

演示:

集合间操作
sinter
获取若干个key的交集,时间复杂度O(N*M)

演示:

sinterstore
获取若干个key的交集,将结果放到destination中,返回值是交集的元素个数

演示:

sunion
返回若干个集合并集的结果,时间复杂度O(N),N是总集合个数

演示:

sunionstore
将若干个集合并集的结果存储到destination中,返回并集的元素个数

演示:

sdiff
获得若干个集合的差集,时间复杂度O(N),N是总集合个数

演示:

sdiffstore
将若干个集合的差集存储到destination中,返回值是差集中元素的个数

演示:

内部编码
intset
整数集合,当元素全部是整数时,并且数量不多,使用整数集合存储元素

hashtable
使用哈希表存储元素

应用场景
- 保存用户画像(方便根据用户画像计算用户之间的公共标签)
- 计算用户之间的共同好友(好友推荐)
- 统计uv(去重)
pv(page view):用户每次访问服务器产生一个pv
uv(user view):每个用户访问服务器产生一个uv,同一个用户访问多次只会产生一个uv,用于统计用户个数

4718

被折叠的 条评论
为什么被折叠?



