用途

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。

geoadd

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

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

返回结果
添加的条数

  1. 127.0.0.1:6379> GEOADD geo1 108.953364 34.276423 xian 109.502912 36.648447 yanan 107.25837 34.35628 baoji
  2. (integer) 3

geopos

  1. GEOPOS key member [member ...]

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

  1. 127.0.0.1:6379> geopos geo1 xian
  2. 1) 1) "108.9533659815788269"
  3. 2) "34.27642210258066058"
  4. 127.0.0.1:6379> geopos geo1 baoji
  5. 1) 1) "107.25837081670761108"
  6. 2) "34.35628102742678891"
  7. 127.0.0.1:6379> geopos geo1 weinan
  8. 1) (nil)

geodist

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

geodist 用于返回两个给定位置之间的距离。
member1 member2 为两个地理位置。
最后一个距离单位参数说明:

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


返回结果
距离

  1. 127.0.0.1:6379> geodist geo1 xian yanan m
  2. "268486.0792"
  3. 127.0.0.1:6379> geodist geo1 xian yanan km
  4. "268.4861"

可以看到西安和延安的距离是268km。

georadius、georadiusbymember

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

georadius 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
georadiusbymember GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 georadiusbymember 的中心点是由给定的位置元素决定的, 而不是使用经度和纬度来决定中心点。
参数说明:

  • m :米,默认单位。
  • km :千米。
  • mi :英里。
  • ft :英尺。
  • WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。
  • WITHCOORD: 将位置元素的经度和维度也一并返回。
  • WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
  • COUNT 限定返回的记录数。
  • ASC: 查找结果根据距离从近到远排序。
  • DESC: 查找结果根据从远到近排序。
    1. 127.0.0.1:6379> GEORADIUS geo1 108.9533659815788269 34.27642210258066058 200 km WITHCOORD WITHCOORD DESC
    2. 1) 1) "baoji"
    3. 2) 1) "107.25837081670761108"
    4. 2) "34.35628102742678891"
    5. 2) 1) "xian"
    6. 2) 1) "108.9533659815788269"
    7. 2) "34.27642210258066058"
    8. 127.0.0.1:6379> GEORADIUS geo1 108.9533659815788269 34.27642210258066058 200 km WITHCOORD WITHCOORD ASC
    9. 1) 1) "xian"
    10. 2) 1) "108.9533659815788269"
    11. 2) "34.27642210258066058"
    12. 2) 1) "baoji"
    13. 2) 1) "107.25837081670761108"
    14. 2) "34.35628102742678891"
    15. 127.0.0.1:6379>
    16. 127.0.0.1:6379> GEORADIUSBYMEMBER geo1 xian 200 km
    17. 1) "baoji"
    18. 2) "xian"

    geohash

    1. GEOHASH key member [member ...]
    geohash 用于获取一个或多个位置元素的 geohash 值。

返回结果
hash值

  1. 127.0.0.1:6379> GEOHASH geo1 xian yanan
  2. 1) "wqj6zrc6tk0"
  3. 2) "wqtb7z9sdv0"