简介

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

Redis >= 3.2.0 版本启用

命令

GEOADD

GEOADD 用于存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。

语法:

  1. GEOADD key longitude latitude member [longitude latitude member ...]

GEODIST

GEODIST 用于返回两个给定位置之间的距离。

语法:

  1. GEODIST key member1 member2 [m|km|ft|mi]

距离单位说明:
**

  • m :米,默认单位。
  • km :千米。
  • mi :英里。
  • ft :英尺。

注意:假设地球是一个完美的球体,则计算距离,因此在极端情况下误差可能高达0.5%。

GEOPOS

GEOPOS 用于从给定的 key 里返回所有指定名称(member)的位置(经度和纬度),不存在的返回 nil。

语法:

  1. GEOPOS key member [member ...]

GEORADIUS、GEORADIUSBYMEMBER

GEORADIUS 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。

GEORADIUSBYMEMBER 和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的, 而不是使用经度和纬度来决定中心点。

语法:

  1. # GEORADIUS
  2. GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
  3. # GEORADIUSBYMEMBER
  4. GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

选项说明:

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

总结

  • Geo 属于 zset 类型:type geo_key -> zset
  • 注意:没有 GEODEL 命令,因为可以使用 ZREM 来删除元素。地理位置索引结构只是一个排序集。
  • 关于地球模型:由于距离是采用 Haversine 公式(假设地球是个完美的球体),但实际的地基并非完美球体,所以存在一定的误差,极端情况下误差率高达 0.5%

扩展阅读