【Redis学习系列】地理空间

/ Redis / 没有评论 / 1140浏览

地理空间

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

geoadd

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

127.0.0.1:6379> geoadd chinacity 116.413384 39.910925 beijing
(integer) 1
#同时添加多条记录
127.0.0.1:6379> geoadd chinacity 117.209523 39.093668 tianjing 114.536596 38.043202 hebei 112.569376 37.879829 shanxi
(integer) 3
127.0.0.1:6379> geopos chinacity shanxi
1) 1) "112.56937533617019653"
   2) "37.87982986239893535"
127.0.0.1:6379> 

geopos

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

127.0.0.1:6379> geopos chinacity beijing tianjing shanxi anhui
1) 1) "116.41338318586349487"
   2) "39.9109247398676672"
2) 1) "117.2095218300819397"
   2) "39.09366727006781161"
3) 1) "112.56937533617019653"
   2) "37.87982986239893535"
4) (nil) #不存在返回null

geodist

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

127.0.0.1:6379> geodist chinacity beijing tianjing
"113715.0724"
127.0.0.1:6379> geodist chinacity beijing anhui
(nil)
127.0.0.1:6379> geodist chinacity tianjing shanxi km  #可以带单位
"425.8851"

georadius

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

命令:GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

127.0.0.1:6379> georadius chinacity 117.156515 39.144105 200 km WITHCOORD
1) 1) "tianjing"
   2) 1) "117.2095218300819397"
      2) "39.09366727006781161"
2) 1) "beijing"
   2) 1) "116.41338318586349487"
      2) "39.9109247398676672"
127.0.0.1:6379> georadius chinacity 117.156515 39.144105 800 km WITHCOORD
1) 1) "shanxi"
   2) 1) "112.56937533617019653"
      2) "37.87982986239893535"
2) 1) "hebei"
   2) 1) "114.53659862279891968"
      2) "38.04320278000297151"
3) 1) "tianjing"
   2) 1) "117.2095218300819397"
      2) "39.09366727006781161"
4) 1) "beijing"
   2) 1) "116.41338318586349487"
      2) "39.9109247398676672"
127.0.0.1:6379> georadius chinacity 117.156515 39.144105 200 km WITHCOORD WITHDIST
1) 1) "tianjing"
   2) "7.2384"
   3) 1) "117.2095218300819397"
      2) "39.09366727006781161"
2) 1) "beijing"
   2) "106.4840"
   3) 1) "116.41338318586349487"
      2) "39.9109247398676672"

georaduisbymember

和georaduis参数类型,只是以member来搜索

127.0.0.1:6379> georadiusbymember chinacity tianjing 100 km #根据member来获取天津附近100公里的城市
1) "tianjing"
127.0.0.1:6379> georadiusbymember chinacity tianjing 200 km
1) "tianjing"
2) "beijing"
127.0.0.1:6379> georadiusbymember chinacity tianjing 300 km
1) "hebei"
2) "tianjing"
3) "beijing"
127.0.0.1:6379> georadiusbymember chinacity tianjing 500 km
1) "shanxi"
2) "hebei"
3) "tianjing"
4) "beijing"

geohash

使用 geohash 来保存地理位置的坐标。

127.0.0.1:6379> geohash chinacity beijing tianjing shanxi
1) "wx4g1199ur0"
2) "wwgq7hv35g0"
3) "ww8p3xfd080"

重点!

geo命令底层使用的还是set;我们可以通过set命令来进行查验。

127.0.0.1:6379> zrange chinacity 0 -1
1) "shanxi"
2) "hebei"
3) "tianjing"
4) "beijing"
127.0.0.1:6379> zrem chinacity tianjing
(integer) 1