GEO就是Geolocation的简写形式,代表地理坐标。Redis在6.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。

常见命令

  • GEOADD:添加一个地理空间信息,包含:经度(longitude)、纬度(latitude)、值(member)
  • GEODIST:计算指定的两个点之间的距离并返回
  • GEOHASH:将指定member的坐标转化为hash字符串形式并返回
  • GEOPOS:返回指定member的坐标
  • GEORADIUS:指定圆心、半径,找到该园内包含的所有member,并按照与圆心之间的距离排序后返回。6.2以后已废弃
  • GEOSEARCH:在指定范围内搜索member,并按照与指定点之间的距离排序后返回。范围可以是圆形或矩形。6.2以后新功能
  • GEOSEARCHSTORE:与GEOSEARCH功能一致,不过可以把结果存储到一个指定的key。6.2以后新功能

使用案例

需求:

  1. 添加下面几条数据:
    • 北京南站(116.378248 39.865275)
    • 北京站(116.42803 39.903738)
    • 北京西站(116.322287 39.893729)
  2. 计算北京西站到北京站的距离
  3. 搜索天安门(116.397904 39.909005)附近10km内的所有火车站,并按照距离升序排序

添加命令

GEOADD g1 116.378248 39.865275 bjn 116.42803 39.903738 bjz 116.322287 39.893729 bjx

计算距离

GEODIST g1 bjx bjz km
"9.0916"

搜索

GEOSEARCH g1 FROMLONLAT 116.397904 39.909005 BYRADIUS 10 km WITHDIST
1) 1) "bjz"
2) "2.6361"
2) 1) "bjn"
2) "5.1452"
3) 1) "bjx"
2) "6.6723"