美文网首页
Redis 特殊数据类型

Redis 特殊数据类型

作者: SheHuan | 来源:发表于2021-07-07 21:23 被阅读0次

    一、Geo

    Geo,即地理位置,核心原理是使用 GeoHash 这种地理空间位置编码方法,将二维的地理空间位置的经度、纬度、名称编码成一维字符串,GeoHash 表示的是一个区域。

    可以用来计算两个位置之间的距离(测距),某位置周围一定距离有哪些位置(实现附近的人、车辆功能)等。

    经纬度可以通过坐标拾取工具 http://api.map.baidu.com/lbsapi/getpoint/index.html 来获取

    • geoadd:添加地理位置(经度、纬度、名称),可以一次添加一个或多个
    geoadd sights 108.971152 34.225619 dayanta
    geoadd sights 108.95346 34.265725 zhonglou
    geoadd sights 109.2851 34.389417 bingmayong
    geoadd sights 108.779778 34.210991 kunmingchi 110.073028 34.497647 huashan
    
    • geopos:根据地理位置名称获取对应经纬度,存储的经纬度和获取的在精度上有所差异。
    geopos sights zhonglou
    
    • geodist:计算两个地理位置之间的距离,可以指定距离的单位:m、km、mi、ft
    geodist sights dayanta zhonglou km
    
    • georadiusbymember:我们举例来说明该指令的用法,以zhonglou为中心,查找其方圆50km范围内距离最近的3个地理位置,并按照距离升序排列,withdist参数表示返回对应的距离,该命令返回结果不会排除指定的中心地理位置
    georadiusbymember sights zhonglou 50 km withdist count 3 asc
    
    • georadius:和 georadiusbymember 功能类似,但是需要指定中心位置的经纬度,而不是指定中心位置的名称
    georadius sights 108.95346 34.265725 50 km withdist count 3 asc
    
    • geohash:返回地理位置经纬度对应的11位geohash编码字符串
     geohash sights zhonglou
    
    • 移除地理位置:官方并未直接提供移除的命令,但是,由于 GeoHash 底层是基于 ZSet 实现的,我们可以使用zrem 命令来移除
    zrem sights huashan
    

    二、HyperLogLog

    如果需要统计一个网站的 UV,数据量较少的情况下可以使用Set实现,但如果是百万甚至千万级别的 UV 则会消耗大量的内存空间,效率低。更好的办法是使用 HyperLogLog,它是一种不精确的数据去重、统计方案,统计结果可能存在最大0.81%的误差,最多需要12kb的内存空间,效率高,UV 统计结果也允许有一定误差,就可以考虑使用 HyperLogLog。

    • pfadd:添加数据记录

    • pfcount:统计数据

    • pfmerge:根据 key 将多个 HyperLogLog 合并成一个新的 HyperLogLog,如下根据 uv uv2 合并一个新的 uv3:

    pfmerge uv3 uv uv2
    

    三、Bitmap

    Bitmap,位图,不是一种实际的数据类型,而是在 String 类型基础上定义的位操作。在 Redis 中,字符串最终也是以二进制01组合的形式存储的,Bitmap 相关命令就是用来操作二进制数据的。可以用来存储一些只有两种状态的数据,例如签到、打卡数据,效果高而且节省空间,比如要记录某个用户一年365天的打卡记录,只需要365bit,约46byte。

    • setbit:设置 key 对应 value 在指定 offset(偏移量,从0开始) 位置的 bit(0、1)值。
      比如我们记录某个用户一周内每天的签到情况,0表示未签到,1表示签到:
    setbit sign 0 1
    
    • getbit:获取 key 对应 value 在指定 offset 位置的 bit 值,如下获取用户一周内某一天的签到情况:
    getbit sign 1
    
    • bitcount:统计在指定 offset 范围内,二进制数据中1的个数,如下统计用户一周内签到的天数:
    bitcount sign 0 6
    

    相关文章

      网友评论

          本文标题:Redis 特殊数据类型

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