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}

总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘿嘿嘿1212

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值