目录
2.7、集合中相关命令:sinter、sinterstore、sunion、sunionstore、sdiff、sdiffstore
1、set
set数据类型的特点:
- set中的元素是无序的
- set中的元素不能重复
- set中支持多个几个取交集并集差集等~
2、set相关命令
2.1、添加元素 sadd
- sadd:往集合中添加元素;重复元素无法添加到集合中
- 语法:sadd key member [member ...]
- 返回值:成功添加元素的个数(集合已经存在的元素,再次添加不算为添加成功)
- 时间复杂度O(1)
举例:
2.2、获取元素 smembers
- smembers:获取一个key中的所有元素;元素顺序是无序的
- 语法:smembers key
- 返回值:集合中的所有元素
- 时间复杂度O(1)
举例:
注:当集合中存放的都是整数,且数量不是特别多的情况下,内部编码是intset,此时虽然是无序的,但我本人猜测可能还是有处理的,相对来说还是有序的,从小到大 排列~
当内部编码是hashtable时,就是完全无序了~
2.3、判断元素是否存在 sismember
- sismember:判断元素是否存在
- 语法:sismember key member
- 返回值:1表示存在,0表示不存在
- 时间复杂度
举例:
2.4、获取set中元素数量 scard
- scard:获取一个set的基数,也就是set中的元素个数
- 语法:scard key
- 返回值:set内的元素的个数
- 时间复杂度O(1)
举例:
2.5、删除元素spop、srem
spop: 随机删除一个或多个元素,由于set中元素是无序的,所以具体删除哪个元素也是随机的
- 语法:spop key [count] 【不带参数默认为1】
- 返回值:被删除的元素的值
- 时间复杂度O(n) --- n->count
举例:
srem:删除集合中指定的元素
- 语法:srem key member [member...]
- 返回值:成功删除的元素个数
- 时间复杂度O(k)---被删除的个数~
举例:
2.6、移动元素smove
- smove:将一个元素从一个集合中移动到另一个集合中~
- 语法:smove source destination member
- 返回值:命令执行成功返回1;失败返回0
- 时间复杂度O(1)
举例:
2.7、集合中相关命令:sinter、sinterstore、sunion、sunionstore、sdiff、sdiffstore
sinter:获取指定set的交集中的元素
- 语法:sinter key [key...]
- 返回值:交集的元素
- 时间复杂度O(n*m)---->n是最小的集合元素个数,m是最大的集合元素个数
举例:
sinterstore:获取指定set的交集中的元素并保存到另一个指定集合set中
- 语法:sinterstore destination key [key...]
- 返回值:交集元素个数
- 时间复杂度O(n*m)---->n是最小的集合元素个数,m是最大的集合元素个数
举例:
sunion:获取指定的集合set的并集中的元素
- 语法:sunion key [key...]
- 返回值:并集的元素
- 时间复杂度O(N)---N为指定的所有的集合set的总的元素个数
举例:
sunionstore:获取指定的集合set的并集中的元素并保存到指定的目标集合set中
- 语法:sunionstore
- 返回值:并集的元素个数
- 时间复杂度O(N)---N为指定的所有的集合set的总的元素个数
举例:
sdiff:获取指定的集合set的差集中元素
- 语法:sdiff key [key...]
- 返回值:差集的元素
- 时间复杂度O(N)---N为指定的所有的集合set的总的元素个数
举例:
sdiffstore:
- 语法:sdiffstore
- 返回值:差集的元素个数
- 时间复杂度O(N)---N为指定的所有的集合set的总的元素个数
举例:
3、应用场景
3.1、使用set来保存用户的标签
例如最常见的“人物画像”,给相应的用户打上对应标签后,针对性给该用户推送他可能感兴趣的话题
或者例如:我们博客网站常常使用到的兴趣标签,把一个个有着相同爱好,关注类似内容的用户利用一个标签把他们进行归并
3.2、使用set计算用户间的共同好友
共同好友功能,共同喜好,或者可以引申到二度好友之类的扩展应用
例如QQ中有一个功能叫做你可能认识的人~
3.3、使用set统计UV
PV:用户每次访问某一个服务器时,都会产生一个pv
UV:用户访问服务器,会产生一个UV,但同一个多次访问不会使UV增加,所以使用set统计UV,能够很好的做到去重~
好啦,下期见啦~