概要
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,用于统计用户个数