集合

作者: lookphp | 来源:发表于2019-07-11 15:39 被阅读0次

    集合也是用来保存多个的字符串元素

    image.png

    集合特点

    • 集合中不允许有重复元素
    • 集合中的元素是无序的
    • 不能通过索引下标获取元素
    一个集合最多可以存储

    个元素。

    redis 支持集合内的增删改查,同时也支持多个集合取交集、并集、差集。

    命令

    集合内操作

    • 添加元素 sadd key element [element ...]
    • 删除元素 srem key element [element ...]
    • 计算元素个数 scard key 时间复杂度为O(1) , 不会遍历集合所有元素,而是直接使用redis的内部变量
    • 判断元素是否在集合中 sismember key element
    • 随机从集合中返回指定个数的元素 srandmember key [count] 不写count,默认数量是1
    • 从集合随机弹出元素 spop key [count]
    • 获取所有元素 smembers key

    spop 和 srandmember的区别

    相同点 不同点
    都是随机从集合中选出元素 spop命令执行后,元素会从集合中删除,而srandmember不会

    注意
    smemberslrangehgetall 都是属于比较重的命令,如果元素过多,会存在阻塞Redis的可能性。这时候可以使用sscan来完成。

    集合间操作

    • 求多个集合的交集 sinter key [key ...]
    • 求多个集合的并集 sunion key [key ...]
    • 求多个集合的差集 sdiff key [key ...]
    • 将交集、并集、差集的结果保存
      sinterstore destination key [key ...]
      sunionstore destination key [key ...]
      sdiffstore destionation key [key ...]

    内部编码

    • intset (整数集合) 当集合中的元素都是整数且小于配置set- max- intset- entries时
    • hashtable (哈希表)

    使用场景

    • sadd = Tagging (标签)
    • spop/srandmember = Random item (生成随机数 ,比如抽奖)
    • sadd + sinter = Social Graph (社交需求)

    相关文章

      网友评论

          本文标题:集合

          本文链接:https://www.haomeiwen.com/subject/rterkctx.html