• Redis数据结构---集合


    集合(set) 类型也是用来保存多个的字符串元素, 但和列表类型不一样的是, 集合中不允许有重复元素, 并且集合中的元素是无序的, 不能通过索引下标获取元素

    一个集合最多可以存储232-1个元素。

    Redis除了支持集合内的增删改查,同时还支持多个集合取交集、 并集、 差集,合理地使用好集合类型,能在实际开发中解决很多实际问题

    常用命令

    添加元素
    sadd key element [element ...]
    
    删除元素
    srem key element [element ...]
    
    计算元素个数
    scard key
    注:scard的时间复杂度为O(1),它不会遍历集合所有元素, 而是直接用Redis内部的变量
    
    判断元素是否在集合中
    sismember key element
    如果给定元素element在集合内返回1, 反之返回0
    
    随机从集合返回指定个数元素
    srandmember key [count]
    [count]是可选参数, 如果不写默认为1
    
    从集合随机弹出元素
    spop key [count]
    注:srandmember和spop都是随机从集合选出元素, 两者不同的是spop命令执行后, 元素会从集合中删除, 而srandmember不会。
    
    获取所有元素
    smembers key
    注:smembers和lrange、 hgetall都属于比较重的命令, 如果元素过多存在阻塞Redis的可能性, 这时候可以使用sscan来完成
    
    
    求多个集合的交集
    sinter key [key ...]
    
    求多个集合的并集
    suinon key [key ...]
    
    求多个集合的差集
    sdiff key [key ...]
    
    将交集、 并集、 差集的结果保存
    sinterstore destination key [key ...]
    suionstore destination key [key ...]
    sdiffstore destination key [key ...]

    命令复杂度

    内部编码

    集合类型的内部编码有两种:
    ·intset(整数集合) : 当集合中的元素都是整数且元素个数小于set-maxintset-entries配置(默认512个) 时,Redis会选用intset来作为集合的内部实现, 从而减少内存的使用。
    ·hashtable(哈希表) : 当集合类型无法满足intset的条件时, Redis会使用hashtable作为集合的内部实现。

    使用场景

    集合类型比较典型的使用场景是标签(tag

    集合类型的应用场景通常为以下几种:

    ·sadd=Tagging(标签)
    ·spop/srandmember=Random item(生成随机数, 比如抽奖)
    ·sadd+sinter=Social Graph(社交需求)
  • 相关阅读:
    php 下设置cookie问题
    js 页面无滚动条添加滚轮事件
    Python中关于字符串的问题
    Python 字符串相加问题
    ajax 同步和异步
    重叠div鼠标经过事件
    Myeclipse中将项目上传到码云
    eclipse debug的时候提示debug Edit Source Lookup path
    阿里云+wordpress搭建个人博客网站
    centos7 安装mysql
  • 原文地址:https://www.cnblogs.com/MacoLee/p/13960078.html
Copyright © 2020-2023  润新知