• Redis 三种特殊数据类型


    geospatial地理位置

    Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作

    Redis GEO 操作方法有:

    • geoadd:添加地理位置的坐标。
      GEOADD key longitude(经度) latitude(纬度) member(位置名称) [longitude latitude member ...]
    • geopos:获取地理位置的坐标。
      GEOPOS key member(位置名称) [member ...]
    • geodist:计算两个位置之间的距离。
      GEODIST key member1(位置名称) member2(位置名称) [m|km|ft|mi](单位)
    • georadius:根据经纬度坐标来获取指定范围内的地理位置。
      GEORADIUS key longitude latitude radius(半径) m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
    • georadiusbymember:根据位置名称获取指定范围内的地理位置。
      GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
    • geohash:位置的 geohash 值。
      GEOHASH key member [member ...]

    参数说明:

    • WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。
    • WITHCOORD: 将位置元素的经度和维度也一并返回。
    • WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
    • COUNT 限定返回的记录数。
    • ASC: 查找结果根据距离从近到远排序。
    • DESC: 查找结果根据从远到近排序。

     测试使用

    127.0.0.1:6379> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
    (integer) 2
    
    127.0.0.1:6379> GEORADIUS Sicily 15 37 200 km WITHDIST 
    1) 1) "Palermo" #位置名称
       2) "190.4424" #当前位置与指定位置的距离
    2) 1) "Catania"
       2) "56.4413"
    127.0.0.1:6379> GEORADIUS Sicily 15 37 200 km WITHCOORD
    1) 1) "Palermo" #位置名称
       2) 1) "13.36138933897018433" #当前位置经度
          2) "38.11555639549629859" #当前位置纬度
    2) 1) "Catania"
       2) 1) "15.08726745843887329"
          2) "37.50266842333162032"
    127.0.0.1:6379> GEORADIUS Sicily 15 37 200 km WITHDIST WITHCOORD
    1) 1) "Palermo" #位置名称
       2) "190.4424" #当前位置与指定位置的距离
       3) 1) "13.36138933897018433" #当前位置经度
          2) "38.11555639549629859" #当前位置纬度
    2) 1) "Catania"
       2) "56.4413"
       3) 1) "15.08726745843887329"
          2) "37.50266842333162032"
    
    127.0.0.1:6379> GEOADD Sicily 13.583333 37.316667 "Agrigento"
    (integer) 1
    127.0.0.1:6379> GEORADIUSBYMEMBER Sicily Agrigento 100 km #指定位置的指定范围中的地理位置
    1) "Agrigento" #位置名称
    2) "Palermo" #位置名称
    127.0.0.1:6379> GEOHASH Sicily Palermo Catania #位置的geohash值
    1) "sqc8b49rny0"
    2) "sqdtr74hyu0"

    Redis HyperLogLog

    Redis HyperLogLog 是用来做基数统计的算法

    什么是基数

    A {1, 3, 5, 7, 5, 7, 8}

    B {1, 3, 5 ,7, 8}

    基数(不重复元素)为5

    优点:占用的内存是固定的,每个 HyperLogLog 键只需要花费 12 KB 内存

    应用场景

    网页的浏览量统计,一个人访问一个网站多次,之统计一次

    传统方式,set(特点set内部元素不重复)保存用户id

    测试使用

    127.0.0.1:6379> pfadd mykey a b c d e f g a b c d e f g #添加
    (integer) 1
    127.0.0.1:6379> pfcount mykey #统计不重复的元素
    (integer) 7
    127.0.0.1:6379> pfadd mykey2 a b c d e f g h i j k l m n
    (integer) 1
    127.0.0.1:6379> pfcount mykey2
    (integer) 14
    127.0.0.1:6379> pfmerge mykey3 mykey mykey2 #合并集合
    OK
    127.0.0.1:6379> pfcount mykey3 #统计不重复的元素
    (integer) 14

    Redis BitMap(位存储)

    通过一个bit位来表示某个元素对应的值或者状态(只有0或1两种状态)

    1字节=8bit

    位操作

    127.0.0.1:6379> setbit mykey 1 1
    (integer) 0
    127.0.0.1:6379> setbit mykey 7 1
    (integer) 0
    127.0.0.1:6379> get mykey
    "A"
    127.0.0.1:6379> setbit mykey 9 1
    (integer) 0
    127.0.0.1:6379> get mykey
    "A@"

    应用场景

    统计用户活跃、不活跃,用户签到、未签到,只要是两个状态的都可以使用BitMaps

    用户签到

    用户一年的签到情况

    key:用户Id ,offset:日期(每天),value:签到情况(1:签到,0:未签到)

    127.0.0.1:6379> setbit sign_user 0 0 #设置用户(sign_user)第一天未签到
    (integer) 0
    127.0.0.1:6379> setbit sign_user 1 1 #设置用户(sign_user)第二天签到
    (integer) 0
    127.0.0.1:6379> setbit sign_user 2 1 #设置用户(sign_user)第三天签到
    (integer) 0
    127.0.0.1:6379> setbit sign_user 4 0
    (integer) 0
    127.0.0.1:6379> setbit sign_user 5 1
    (integer) 0
    127.0.0.1:6379> setbit sign_user 364 0 #设置用户(sign_user)第365天未签到
    (integer) 0
    127.0.0.1:6379> getbit sign_user 3 #获取用户第三天签到情况
    (integer)
    1
    127.0.0.1:6379> bitcount sign_user #返回一个指定key中位的值为1的个数
    (integer)
    3

    统计每天的活跃用户数量

    Key:日期,offset:用户ID,value:活跃度

    127.0.0.1:6379> setbit 20210902 11 1
    (integer) 0
    127.0.0.1:6379> setbit 20210902 302 1
    (integer) 0
    127.0.0.1:6379> setbit 20210902 9527 1
    (integer) 0
    127.0.0.1:6379> bitCount 20210902
    (integer) 3
  • 相关阅读:
    [转]How can I create a design netlist without including my source design files?
    [转]基于FPGA的以太网开发
    [转]GMII/RGMII/SGMII/TBI/RTBI接口信号及时序介绍
    [原]Altium画PCB时鼠标十字不能对准焊盘中心
    [转]Altera特殊管脚的使用(适用全系列Altera FPGA,MSEL区别除外)-来自altera论坛
    [转]STM32正交编码器驱动电机
    [转]使用D触发器制作正交编码器的鉴相电路
    [转]解决STM32开启定时器时立即进入一次中断程序问题
    [转]ISE iMPACT bit生成mcs
    [转]NiosII处理器软件代码优化方法
  • 原文地址:https://www.cnblogs.com/WarBlog/p/15215223.html
Copyright © 2020-2023  润新知