redis学习(2)----geospatial、Hyperloglog、Bitmaps

    技术2023-09-30  70

    Redis三种特殊数据类型

    1、geospatial地理位置

    该功能可以推算地理位置信息,两地之间的距离 只有6个命令:

    GEOADD

    添加地理位置,可通过java直接导入! 参数 key 值(经度 纬度 名称) geoadd china:city 116.40 39.90 beijin geoadd china:city 121.47 31.23 shanghai geoadd china:city 160.50 29.53 chongqing 114.05 22.52 shenzhen geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian

    GEOPOS

    获取指定城市的经度和纬度

    geopos china:city beijin 1) 1) "116.39999896287918091" 2) "39.90000009167092543"

    GEODIST

    获取两个目标间的距离 单位: m km mi ft

    GEODIST china:city beijin shanghai km "1067.3788"

    GEORADIUS

    GEORADIUS china:city 110 30 500 km 以110 30为经纬度查询,方圆500km的目标 1) "xian" GEORADIUS china:city 110 30 500 km withdist 距离 1) 1) "xian" 2) "483.8340" GEORADIUS china:city 110 30 500 km withcoord 经纬度 1) 1) "xian" 2) 1) "108.96000176668167114" 2) "34.25999964418929977" GEORADIUS china:city 110 30 500 km withcoord withdist count 3 查出距离、经纬度、限定三个最近的目标

    GEOHASH

    返回一个或多个位置元素 将二位的经纬度转化为一维的字符串

    GEOHASH china:city beijin xian 1) "wx4fbxxfke0" 2) "wqj6zky6bn0"

    GEORADIUSBYMEMBER

    找出位于指定元素周围的其他元素 城市之间的定位

    GEORADIUSBYMEMBER china:city beijin 1000 km withcoord withdist 1) 1) "beijin" 2) "0.0000" 3) 1) "116.39999896287918091" 2) "39.90000009167092543" 2) 1) "xian" 2) "910.0565" 3) 1) "108.96000176668167114" 2) "34.25999964418929977"

    底层原理

    底层实现原理为Zset可以使用Zset

    zrange china:city 0 -1 查看所有元素 1) "xian" 2) "shenzhen" 3) "hangzhou" 4) "shanghai" 5) "beijin" 6) "chongqing" 可以使用 zrem china:city beijin 去消除定位信息

    2、Hyperloglog

    基数:不重复的元素;基数统计算法 优点:占用内存固定 可应用于网页的UV(单人访问多次仍为单人)

    pfadd mykey a b c d e f g 创建第一组元素 pccount mykey 统计mykey元素的基数数量 pfmerge mykey3(目的set) mykey mykey2 合并两组mykey和mykey2 => mykey3 并集

    允许容错可以使用,不允许–>set

    3、Bitmaps

    位存储==>统计用户信息,活跃、不活跃、登录、未登录、打卡, 365打卡

    setbit key offset value offset==>目标的地址 setbit a 0 1 ==>存入bitmaps getbit a 0 ==>查看0地址上有没有至1 bitcount a ==>查看key中至1总数
    Processed: 0.011, SQL: 10