欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Redis(开发与运维):25---常用功能之(GEO(地理信息定位))

程序员文章站 2022-05-19 14:46:49
...

一、CEO概述

  • Redis3.2版本提供了GEO(地理信息定位)功能,支持存储地理位置信 息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能,对于需 要实现这些功能的开发者来说是一大福音
  • GEO功能是Redis的另一位作者Matt Stancliff借鉴NoSQL数据库Ardb实现的,Ardb的作者来自中国,它提供了优秀的GEO功能

二、增加地理位置信息(geoadd)

geoadd key longitude latitude member [longitude latitude member ...]
  • 参数如下:
    • longitude:地址位置的经度
    • latitude:地址位置的纬度
    • member:成员
  • 相关注意事项:
    • geoadd一次可以添加多个地理位置信息
    • geoadd添加成功返回1
    • 如果member已经存在,那么该命令返回0,此时代表更新member的值
  • 例如:下面添加5个城市的经纬度

Redis(开发与运维):25---常用功能之(GEO(地理信息定位))

Redis(开发与运维):25---常用功能之(GEO(地理信息定位))

三、获取地理信息位置(geopos)

geodist key member1 member2 [unit]
  • 该命令用来获取两个地址位置的距离
  • unit参数代表返货结果的单位,包含以下4种:
    • m(meters)代表米
    • km(kilometers)代表公里
    • mi(miles)代表英里
    • ft(feet)代表尺
  • 例如:下面计算天津到北京的距离,以公里为单位

Redis(开发与运维):25---常用功能之(GEO(地理信息定位))

四、获取指定位置范围内的地理信息位置集合(georadius、georadiusbymember)

georadius key longitude latitude radiusm|km|ft|mi [withcoord] [withdist] 
    [withhash] [COUNT count] [asc|desc] [store key] [storedist key]
georadiusbymember key member radiusm|km|ft|mi [withcoord] [withdist] 
    [withhash] [COUNT count] [asc|desc] [store key] [storedist key]
  • 两个命令作用相同,都是以一个地理位置为中心算出指定半径内的其他地理信息位置
  • 不同的是:
    • georadius命令的中心位置给出了具体的经纬度
    • georadiusbymember只需给出成员即可
  • 其中radiusm|km|ft|mi是必需参数,指定了半径(带单位),其他可选参数意义如下:
    • withcoord:返回结果中包含经纬度
    • withdist:返回结果中包含离中心节点位置的距离
    • withhash:返回结果中包含geohash,有关geohash后面介绍
    • COUNT count:指定返回结果的数量
    • asc|desc:返回结果按照离中心节点的距离做升序或者降序
    • store key:将返回结果的地理位置信息保存到指定键
    • storedist key:将返回结果离中心节点的距离保存到指定键。
  • 例如:下面计算5个城市中,距离北京150公里以内的城市

Redis(开发与运维):25---常用功能之(GEO(地理信息定位))

五、获取geohash

geohash key member [member ...]

Redis(开发与运维):25---常用功能之(GEO(地理信息定位))

  • geohash有如下特点:
    • GEO的数据类型为zset(见下图),Redis将所有地理位置信息的geohash存放在zset中
    • 字符串越长,表示的位置更精确,下图给出了字符串长度对应的精度,例如geohash长度为9时,精度在2米左右
    • 两个字符串越相似,它们之间的距离越近,Redis利用字符串前缀匹配算法实现相关的命令
    • geohash编码和经纬度是可以相互转换的

Redis(开发与运维):25---常用功能之(GEO(地理信息定位))

Redis(开发与运维):25---常用功能之(GEO(地理信息定位))

  • Redis正是使用有序集合并结合geohash的特性实现了GEO的若干命令

六、删除地理位置信息(zrem)

zrem key member
  • GEO没有提供删除成员的命令,但是因为GEO的底层实现是zset,所以可以借用zrem命令实现对地理位置信息的删除
  • 例如,下面将cities:locations中的所有地理位置信息删除

Redis(开发与运维):25---常用功能之(GEO(地理信息定位))

相关标签: Redis(开发与运维)