zoukankan      html  css  js  c++  java
  • Redis的基础类型(四)

    其他数据结构

    BitMaps

    Bitmaps 是在字符串类型上面定义的位操作。一个字节由8个二进制位组成。

    set k1 a
    

    获取value在offset处的值(a对应的ASCII码是97,转换为二进制数据是01100001)

    getbit k1 0
    

    修改二进制数据

    setbit k1 6 1
    setbit k1 7 0
    get k1
    

    QA:怎么变成b了?(b对应的ASCII码是98,转换为二进制数据是01100010)

    //统计二进制位中1的个数
    bitcount k1
    //获取第一个1或者0的位置
    bitpos k1 1
    bitpos k1 0
    

    因为bit非常节省空间(1MB = 8388608 bit),可以用来做大数据量的统计。
    例如:在线用户统计,留存用户统计

    setbit onlineusers 0 1 
    setbit onlineusers 1 1
    setbit onlineusers 2 0
    

    支持按位与、按位或等等操作。

    BITOP AND destkey key [key ...], 对一个或多个key求逻辑并,并将结果报错到destkey。
    BITOP OR destkey key [key ...], 对一个或多个key求逻辑或,并将结果报错到destkey。
    BITOP XOR destkey key [key ...], 对一个或多个key求逻辑异或,并将结果报错到destkey。
    BITOP NOT destkey key , 对给定key求逻辑非,并将结果报错到destkey。
    

    应用场景:
    用户访问统计
    在线用户统计

    Hyperloglogs

      Hyperloglogs : 提供了一种不太精确的基数统计法,用来统计一个集中不重复的元素个数,比如统计网站的UV,或者应用的日活、月活,存在一定的误差。
    

    在Redis中实现的HyperLogLog,只需要12k内存就能统计2^64个数据。

    Geo

    需求:获取半径1公里以内的门店,那么我们就要把门店的经纬度保存起来。那么这时候我们是直接把经纬度保存在数据库中,一个字段存经度,一个字段存纬度。计算距离比较复杂。Redis的GEO直接提供了这个方法、

    geoadd location 11.3333 232.31313 xxx
    geopos location xxx
    

    操作:增加地址位置信息、获取地址位置信息、计算两个位置的距离、获取指定范围内的地理位置集合。

    Streams

    5.0推出的数据类型。支持多播的可持久化的消息队列,用于实现发布订阅功能,借鉴kafka的设计。

    总结

    数据结构总结

    对象 对象type属性值 type命令输出 底层可能的存储结构 object encoding
    字符串对象 OBJ_STRING "string" OBJ_ENCODING_INT
    OBJ_ENCODING_EMBSTR
    OBJ_ENCODING_RAW
    int
    embstr
    raw
    列表对象 OBJ_LIST "list" OBJ_ENCODING_QUICKLIST quicklist
    哈希对象 OBJ_HASH "hash" OBJ_ENCODING_ZIPLIST
    OBJ_ENCODING_HT
    ziplist
    hashtable
    集合对象 OBJ_SET "set" OBJ_ENCODING_INTSET
    OBJ_ENCODING_HT
    intset
    hashtable
    有序集合对象 OBJ_ZSET "zset" OBJ_ENCODING_ZIPLIST
    OBJ_ENCODING_SKIPLIST
    ziplist
    skiplist+hashtable

    编码转换总结

    对象 原始编码 升级编码
    字符串对象 INT
    整数并且小于long 2^63-1
    embstr
    超过44字节,被修改
    raw
    哈希对象 ziplist
    键和值的长度小于64byte,键值对个数不超过512个,同时满足
    hashtable
    列表对象 quicklist
    集合对象 intset
    元素都是整数类型,元素个数小于512个,同时满足
    hashtable
    有序集合对象 ziplist
    元素数量不超过128个,任何一个member的长度小于64字节,同时满足
    skiplist

    应用场景总结

    缓存 -- 提升热点数据的访问速度
    共享数据 -- 数据的存储和共享的问题
    全局ID -- 分布式全局ID 的生成方案(分库分表)
    分布式锁 -- 进程间共享数据的原子操作保证
    在线用户统计和计数
    队列、栈 -- 跨进程的队列、栈
    消息队列 -- 异步解耦的消息机制
    服务注册与发现 -- RPC通信机制的服务协调中心(Dubbo支持Redis)
    购物车
    新浪、Twitter 用户消息时间线
    抽奖
    点赞、签到、打卡
    商品标签
    用户关注模型
    电商产品筛选
    排行榜

  • 相关阅读:
    掌控像素的虚实
    多用组合,少用继承
    HTML5的语法变化和新增加元素
    又逢六月
    设计心情之心情设计
    web2.0生成器(超过100个)[转]
    css+div CSS教程——元素定位
    项目进度
    清华大学统一认证接口与PHP的调用
    将51JOB的求职意向选择框Down了
  • 原文地址:https://www.cnblogs.com/snail-gao/p/14304091.html
Copyright © 2011-2022 走看看