• Redis带你深入学习数据类型set


    目录

    1、set

    2、set相关命令

    2.1、添加元素 sadd

    2.2、获取元素 smembers

    2.3、判断元素是否存在 sismember

    2.4、获取set中元素数量 scard

    2.5、删除元素spop、srem

    2.6、移动元素smove

    2.7、集合中相关命令:sinter、sinterstore、sunion、sunionstore、sdiff、sdiffstore

    3、应用场景


    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,能够很好的做到去重~

    好啦,下期见啦~

  • 相关阅读:
    Linux系统下KVM虚拟机的基本管理和操作
    2022年中级经济师《经济基础知识》考试大纲
    详解软件测试的项目职责、分工、测试流程
    安卓程序执行入口
    经典动画库 animate.css 的应用
    【C++】继承 ⑬ ( 虚继承原理 | 虚继承解决继承二义性问题 | 二义性产生的原因分析 )
    Docker安装Bitbucket
    【Python】编码
    前端工作总结142-element上传组件时候的钩子--event里面有数据参数
    智能驾驶供应商更替潮开启,行泊一体玩家如何“稳赢”?
  • 原文地址:https://blog.csdn.net/LYJbao/article/details/132780885