• Redis 中 Set 数据结构详解


    用法

    Redis 中的 Set 是一个无序,不重复集合(里面的元素为字符串),支持常用的集合操作。

    常见命令

    1. 增

    添加一个或多个元素到 set 中

    SADD key member [ member ... ]
    返回值: 添加成功的元素个数

    将一个元素移到另一个 set 中 

    SMOVE source destination member
    source(原来的 set),destination(移动到的 set),member (要移动的元素)
    返回值: 1 --- 成功,0 --- 失败

    2. 删

    删除指定的元素

    SREM key member [member ...]
    返回值: 本次操作删除的元素个数。

    随机删除元素

    SPOP key [count](count表示要删除的个数)

    返回值:返回删除的元素

    3. 查

    获取元素的个数

    SCARD key

    获取 set 中所有的元素

    SMEMBERS key
    返回值: 所有元素的列表。

    判断当前的元素是否在集合中 

    SISMEMBER key member(你想要判断的成员)

    返回值: 1 ---  存在,  0 --- 该元素不存在 / key不存在 

    4. 交集,并集,差集 

    获取 set 的交集中的元素 

    SINTER key [key ...]
    返回值: 交集的元素。
    SINTERSTORE destination key [key ...](把算好的交集放到指定的 destination 中)
    返回值: 交集的元素个数

     获取 set 的并集中的元素

    SUNION key [key ...] 

    返回值:并集的元素。

    SUNIONSTORE destination key [key ...](把算好的并集放到指定的 destination 中)
    返回值: 并集 的元素个数

     获取 set 的差集中的元素 

    SDIFF key [key ...]
    返回值: 差集的元素。
    SDIFFSTORE destination key [key ...](把算好的差集放到指定的 destination 中)
    返回值: 差集元素的个数

    内部编码

    intset:当集合中的元素都是整数且数量较少时,Redis 使用 intset 结构。intset 是一个紧凑的整数数组,节省内存。

    hashtable:当集合中的元素数量较多或类型多样时,Redis 会使用 hashtable 编码。hashtable 提供了快速的查找性能。


    应用场景

    标签系统:可以使用 Set 存储用户的标签,如兴趣爱好。通过集合运算,可以轻松实现标签交集、并集和差集的计算。

    1. 给用户添加标签

    1. sadd user:1:tags tag1 tag2 tag5
    2. sadd user:2:tags tag2 tag3 tag5

    2. 给标签添加用户

    1. sadd tag1:users user:1 user:3
    2. sadd tag2:users user:1 user:2 user:3

    3. 删除用户下的标签

    srem user:1:tags tag1 tag5

    4. 删除标签下的用户

    1. srem tag1:users user:1
    2. srem tag5:users user:1

    5. 计算用户的共同兴趣爱好

    sinter user:1:tags user:2:tags

    唯一性检测:利用 Set 的无序且不重复特性,可以快速检测出数据集中的重复元素。

    社交网络:在社交网络应用中,可以使用 Set 存储用户的好友列表或关注列表,并通过集合操作实现好友推荐等功能

  • 相关阅读:
    代码随想录二刷 |链表 | 移除链表元素
    基于CentOS7搭建Linux, Nginx, MySQL, PHP环境
    【C++ 科学计算】C++ 一维数据插值算法
    Java - NPE(NullPointerException);Optional
    Ubuntu 安装golang
    五、W5100S/W5500+RP2040树莓派Pico<UDP Client数据回环测试>
    python自然数归一 青少年编程电子学会python编程等级考试二级真题解析2022年3月
    Linux/Ubuntu/Debian 常用用户管理命令
    设计模式-备忘录模式
    计算机毕业设计选题推荐-个人健康微信小程序/安卓APP-项目实战
  • 原文地址:https://blog.csdn.net/llt2997632602/article/details/139292710