目录
1.命令小结
(1)set的特点
1)set中存放的数据也都是String类型
2)set集合中的元素是无须的
3)set集合中的元素是唯一的,不可重复
(2)命令大全
命令 | 含义 | 时间复杂度 |
---|---|---|
sadd key element [element ... ] | 向set添加一个获多个元素 | O(k),k 是元素个数 |
smembers key | 获取集合的所有元素 | O(k),k 是元素个数 |
sismember key element | 判断一个元素是否在set中 | O(1) |
scard key | 求集合中元素个数 | O(1) |
spop key [count] | 随机删除并获取元素 | O(n),n 是count |
srandmember key [count] | 随机获取元素 | O(k),n 是count |
smove sourse destination member | 将元素从一个集合中移到另一个集合 | O(n),n 是count |
srem key member [member ...] | 移除指定元素 | O(N) |
sinter key1 [key2 ... ] | 求交集 | O(m * k),k是几个集合中元素最小的个数,m是键个数 |
sinterstore destination key1 [key2 ...] | 求交集并放入指定集合中 | O(m * k),k是几个集合中元素最小的个数,m是键个数 |
sunion key1 [key2 ... ] | 求并集 | O(k),k是多个集合的元素个数总和 |
sunionstore destination key1 [key2 ...] | 求并集并放入指定集合中 | O(k),k是多个集合的元素个数总和 |
sdiff key1 [key2 ... ] | 求差集 | O(k),k是多个集合的元素个数总和 |
sdffstore destination key1 [key2 ...] | 求差集并放入指定集合中 | O(k),k 是多个集合的元素个数总和 |
2.命令解析
(1)sadd
1)语法:sadd key member [member ... ]
2)含义:将一个或者多个元素添加到key对应的set集合中。重复元素无法添加进去
3)返回值:本次添加成功的元素个数
4)时间复杂度:O(1)
(2)smembers
1)语法:smembers key
2)含义:获取key对应的set集合列表
3)返回值:返回set中的所有元素,顺序随机
4)时间复杂度:O(N),N为元素个数
(3)sismember
1)语法:sismember key member
2)含义:判断一个元素是否存在key对应的set中
3)返回值:1表示存在,0表示key或者member不存在
4)时间复杂度:O(1)
(4)scard
1)语法:scard key
2)含义:获取key对应集合中的元素个数
3)返回值:返回set中的元素个数
4)时间复杂度:O(1)
(5)spop
1)语法:spop key [count]
2)含义:随机删除set中的元素,不写count默认删除一个;指定count则随机删除count个
3)返回值:删除的元素
4)时间复杂度:O(N),N是count
(6)srandmember
1)语法:srandmember key [count]
2)含义:随机从key对应的set集合中取出一个或者count个元素
3)返回值:返回取出的元素
4)时间复杂度:O(N),N是count
(7)smove
1)语法:smove source destination member
2)含义:将member元素从source对应的集合中取出放入destination中
3)返回值:1表示移动成功,0表示失败
4)时间复杂度:O(1)
(8)srem
1)语法:srem key member [member ... ]
2)含义:将指定元素从key对应的集合中移除
3)返回值:删除成功的元素个数
4)时间复杂度:O(N),N为删除的个数
(9)并集、交集、差集概念
1)交集:两个集合求并集,结果为两个集合中都存在的元素
2)并集:两个集合求交集,结果为两个集合的所有元素相加,并去掉重复的元素,只留下一份
3)差集:A和B求差集,A在前面,则返回A中存在,但B中不存在的元素;B和A求差集,B在前面,则返回在B中存在,但A中不存在的元素
下面三个命令都是和上述概念相关的,也是set集合的特点所在
(10)sinter与sinterstore
- sinter
1)语法:sinter key1 [key2 ... ]
2)含义:获取指定集合的交集(可以一个或者多个集合)
3)返回值:交集的元素
4)时间复杂度:O(N*M),N是最小集合的元素个数,M是最大集合的元素个数
- sinterstore
1)语法:sinterstore destination key1 [key2 ... ]
2)含义:获取到的交集元素存放到destination集合中
3)返回值:交集的元素
4)时间复杂度:O(N*M),N是最小集合的元素个数,M是最大集合的元素个数
(11)sunion与sunion
- sunion
1)语法:sunion key1 [key2 ... ]
2)含义:获取给定set的并集中的元素
3)返回值:并集的元素
4)时间复杂度:O(N),N给定的所有集合的总的元素个数
- sunionstore
1)语法:sunionstore destination key [key ... ]
2)含义:获取给定set的并集中的元素并且保存到目标set中
3)返回值:并集的元素个数
4)时间复杂度:O(N),N给定的所有集合的总的元素个数
(12)sdiff与sdiffstore
- sdiff
1)语法:sdiff key [key ... ]
2)含义:获取给定set的差集中的元素
3)返回值:差集的元素
4)时间复杂度:O(N),N是给定的所有集合的总的元素个数
- sdiffstore
1)语法:sdiffstore destination key [key ... ]
2)含义:获取给定set的差集中的元素并且保存到目标set中
3)返回值:差集的元素个数
4)时间复杂度:O(N),N是给定的所有集合的总的元素个数
3.编码方式与应用场景
(1)编码方式
set内部主要有两种编码方式,分别是intset(整数集合)和hashtable(哈希表)
- intset
当set集合中的元素都为整数时,编码方式为intset,可以减少内存的使用
- hashtable
不是intset时,编码方式就为hashtable
(2)应用场景1---保存用户标签
这方面也就是用set来保存用户的特征,从而分析出"用户画像",进而更方便给用户推荐相应的产品。
(3)应用场景2---计算用户之间的公共好友
利用set中元素的唯一性,多个集合之间求并集,就能推算出用户之间的公共好友。
(4)应用场景3---统计UV
UV也就是用户访问服务器后产生的痕迹,痕迹+1,同一个用户多次访问同一个服务器不会使UV增加