• Redis核心数据结构【set】【从入门到入坟】


    SET

    该结构的特点是非整型且超过512是无序存储,整型时是有序存储,且都自动去重数据,类似于Java中HashSet

    常用命令

    • 往集合key中存入元素,元素存在则忽略,若key不存在则新建

      SADD  key  member  [member ...]	
      
    • 从集合key中删除元素

      SREM  key  member  [member ...]	
      
    • 获取集合key中所有元素

      SMEMBERS  key	
      
    • 获取集合key的元素个数

      SCARD  key	
      
    • 判断member元素是否存在于集合key中

      SISMEMBER  key  member
      
    • 从集合key中选出count个元素,元素不从key中删除

      SRANDMEMBER  key  [count]
      
    • 从集合key中选出count个元素,元素从key中删除

      SPOP  key  [count]	
      
    • 不常用

      SMOVE source destination member //将集合中的元素从一个键移动(删除)到另一个键(添加)。如果源集不存在或不包含指定的元素,则不执行任何操作,并返回0
      SSCAN key cursor [MATCH pattern] [COUNT count] //遍历集合
      

    运算操作

    • 交集运算

      SINTER  key  [key ...] 	
      
    • 将交集结果存入新集合destination中

      SINTERSTORE  destination  key  [key ..]	
      
    • 并集运算

      SUNION  key  [key ..]
      
    • 将并集结果存入新集合destination中

      SUNIONSTORE  destination  key  [key ...]	
      
    • 差集运算

      SDIFF  key  [key ...] 
      
    • 将差集结果存入新集合destination中

      SDIFFSTORE  destination  key  [key ...]	
      

    底层结构

    Set 为无序的,自动去重的集合数据类型,Set 数据结构底层实现为一个value 为 null 的 字典( dict )。

    • 当数据可以用整形表示时,Set集合将被编码为intset数据结构注意超过set-max-intset-entrie将会转换为hashtable
      在这里插入图片描述

    • 当元素个数大于 set-max-intset-entries,或元素无法用整形表示,Set将用hashtable存储数据。

      set-max-intset-entries 512       // intset 能存储的最大元素个数,超过则用hashtable编码
      

    intset详细
    hashTable详细

    实际应用

    • 抽奖
      • 参与抽奖加入集合SADD key {userlD}
      • 查看参与抽奖所有用户 SMEMBERS key
      • 抽取count名中奖者 SRANDMEMBER key [count] / SPOP key [count]
    • 点赞,收藏
      • 点赞 SADD like:{消息ID} {用户ID}
      • 取消点赞 SREM like:{消息ID} {用户ID}
      • 检查用户是否点过赞 SISMEMBER like:{消息ID} {用户ID}
      • 获取点赞的用户列表 SMEMBERS like:{消息ID}
      • 获取点赞用户数SCARD like:{消息ID}
    • 集合操作实现关注模型
      • 张三关注的人 zhangsanSet
      • 李四关注的人lisiSet
      • 王五关注的人wanwuSet
      • 张三李四共同关注 SINTER zhangsanSet lisiSet
      • 张三关注的人(王五)同时也关注李四的人SISMEMBER wanwuSet lisi
      • 张三可能认识的人(李四的关注) SDIFF zhangsanSet lisiSet
    • 集合操作实现筛选
      • 添加商品集合
        SADD brand:huawei P40
        SADD brand:xiaomi mi-10
        SADD brand:iPhone iphone12
        SADD os:android P40 mi-10
        SADD cpu:brand:intel P40 mi-10
        SADD ram:8G P40 mi-10 iphone12
      • 商品筛选
        SINTER os:android cpu:brand:intel ram:8G 结果 {P40,mi-10}

    总结

    该结构主要特点是自动去重,以及可进行不同集合间进行交并差运算,可进行去重集合之间进行运算

  • 相关阅读:
    Java变量和数据类型
    66页三级医院智慧医院 信息化建设规划
    魔百盒九联UNT402A_S905L3_线刷固件包_语音蓝牙正常
    Day 52 | 674. 最长连续递增序列 & 718. 最长重复子数组 & 1143.最长公共子序列
    给出32位有符号整数,将这个整数翻转
    【C++】类和对象(下)(再谈构造函数 初始化列表 explicit关键字 static成员 特性 友元 友元函数 友元类 内部类 匿名对象)
    SpringCloud Alibaba 简介
    LVGL---开关(lv_switch)
    【658. 找到 K 个最接近的元素】
    MULLS: Versatile LiDAR SLAM via Multi-metric Linear Least Square 论文翻译
  • 原文地址:https://blog.csdn.net/at10090/article/details/126796031