Set类型特征:1.集合中的元素无序(这里的无序是和List的有序对应的,指的是对元素位置不敏感)。
2.集合中的元素不可重复。
3.和List类似,集合中的每个元素都为String类型。
命令
普通操作
1.Sadd
语法:Sadd key meber [meber....]
返回添加的元素个数。
时间复杂度O(1)。
2.Smembers key
查询元素(通过key),时间复杂度也是O(1)。
3.Sismember key member
判断当前元素是否在集合。
存在的话,返回1,不存在,返回0。
4.Spop
Spop key [count]
count:删除元素的个数,默认情况为1。
由于Set为无序的,所以是随机删除的。
5.Srandmember key [count]
随机获取元素,默认为获取1个,count可以指定获取数量。
6.Smove
Smove Source destination member
将一个元素从一个Set取出来存到另一个Set中,返回1代表成功,0代表失败。
Source:源Set。
destintion:目标set。
如果目标Set已经有源Set中要插入的元素了,那么只会将源set中的元素给删除,目标set中的元素不会增加。
7.Srem
Srem key member [member.....]
可以一次删除一个或者多个member
集合间操作
1.Sinter
Sinter key [key...]
求多个Set的交集,返回结果为交集。
时间复杂度为O(n*m);(n为最小集合个数,m为最大元素个数)
2.SinterStore
SinterStore destintion key[key....]
把算好的交集放入到destntion中,返回结果为个数。
3.Sunion
Sunion key [key....]
求并集的操作。时间复杂度O(N),N表示总的元素个数。
同时也提供了Sunionstore destination key[key....]返回并集的操作。
4.SDiff
O(N):总的元素个数。
SDiff key [key....]
求差集的操作。
同时也提供了SDiffStore destination key[key....]
5.Scard key
求key中元素的个数。
Set内部的编码
1.insert(整数集合)
为了节省空间做的特定优化,适应于当元素均为整数且元素个数不多时。
2.hashtable(哈希表)
类似于Java中的hash表,查找和添加、删除时间复杂度都是O(1),但是对内存空间消耗更大。
Set应用场景
1.使用Set来保存用户的“标签”
像什么购物,短视频,可以使用Set来存用户的喜好,称为用户画像。
2.使用Set来计算用户之间的共同好友
基于Set的求并集操作。
3.使用Set来添加UV
UV:UserView,由于一个用户可能访问多次,而Set不允许元素重复,所以可以来添加UV。