• Redis GEO 特性在 LBS 中的应用总结


    什么是LBS

    LBS(Location Based Service),基于位置的服务。

    Redis和GEO

    Redis 是最热门的 nosql 数据库之一,它的最大特点就是快。
    所以在 LBS 这种需要大量写入和查询的应用场景中,用它来存储用户的地理位置信息最适合不过了。

    Redis 的 GEO 是 3.2 版本的新特性。这个功能可以将用户给定的地理位置信息储存起来, 并对这些信息进行操作。

    PS:关于三种nosql数据库这里我也做了调研,其中mongodb最大的特点是灵活,因为其数据是以json的格式存储,所以字段随时可以增加或减少;Redis的特点是快,适合单一的,简单的,大量数据的存储;HBase我没有做深入研究,它的特点是大,适合做离线缓存。在处理社交这种关系复杂的数据存储时,依然还是需要用mysql这种关系型数据库,nosql并不能完全替代。

    使用

    目前 redis 支持以下 6 个 GEO 的相关操作

    • geoadd:增加某个地理位置的坐标。
    • geopos:获取某个地理位置的坐标。
    • geodist:获取两个地理位置的距离。
    • georadius:根据给定地理位置坐标获取指定范围内的地理位置集合。
    • georadiusbymember:根据给定地理位置获取指定范围内的地理位置集合。
    • geohash:获取某个地理位置的geohash值。

    添加位置和获取位置

    GEOADD location-set longitude latitude member [longitude latitude member ...]

    示例

    redis> GEOADD Hangzhou 120.0919500000 30.3219600000 Xihu

    获取某个地理位置的坐标

    GEOPOS key member [member ...]

    示例

    redis> GEOPOS Hangzhou Sandun Xixi Xihu

    获取两个地理位置的距离

    GEODIST location-set location-x location-y [unit]

    其中 unit 参数是距离单位,可选填

    • m 表示单位为米。
    • km 表示单位为千米。
    • mi 表示单位为英里。
    • ft 表示单位为英尺。

    示例

    redis> GEODIST Hangzhou Xihu Xixi m

    根据给定地理位置坐标获取指定范围内的地理位置集合

    这个功能很有用,可以用来查找周边的点

    GEORADIUS location-set longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [ASC|DESC] [COUNT count]

    其中:

    radius表示范围距离,距离单位是 m|km|ft|mi

    可选参数:

    • WITHCOORD:传入WITHCOORD参数,则返回结果会带上匹配位置的经纬度。
    • WITHDIST:传入WITHDIST参数,则返回结果会带上匹配位置与给定地理位置的距离。
    • ASC|DESC:默认结果是未排序的,传入ASC为从近到远排序,传入DESC为从远到近排序。
    • WITHHASH:传入WITHHASH参数,则返回结果会带上匹配位置的hash值。
    • COUNT count:传入COUNT参数,可以返回指定数量的结果。

    示例

    redis> GEORADIUS Hangzhou 120.0919500000 30.3219600000 10 km

    根据给定地理位置获取指定范围内的地理位置集合

    GEORADIUSBYMEMBER key member radius [m|km|ft|mi] [WITHCOORD] [WITHDIST] [ASC|DESC] [WITHHASH] [COUNT count]

    和 GEORADIUS 一样,只是传入的是member名,不是坐标了

    redis> GEORADIUS Hangzhou Xihu 10 km

  • 相关阅读:
    【模板】快速幂&取余运算
    【模板】ST表
    LOJ #10070 最小生成树计数
    【模板】KMP字符串匹配
    PL/SQL编程要点和注意点
    数据不同方式的提取和提交的性能测试(转载)
    Oracle分析函数之开窗子句-即WINDOWING子句
    Oracle树反向查询的优化(转载)
    oracle默认的hr用户使用脚本安装
    展开BOM并使用最终用量的算法(转载)
  • 原文地址:https://www.cnblogs.com/duanxz/p/4701826.html
Copyright © 2020-2023  润新知