地理空间
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
用于返回两个给定位置之间的距离。最后一个距离单位参数说明:
- m :米,默认单位。
- km :千米。
- mi :英里。
- ft :英尺。
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]
-
参数说明:
-
- m :米,默认单位。
- km :千米。
- mi :英里。
- ft :英尺。
- ==WITHDIST==: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。
- ==WITHCOORD==: 将位置元素的经度和维度也一并返回。
- ==WITHHASH==: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
- COUNT 限定返回的记录数。
- ASC: 查找结果根据距离从近到远排序。
- DESC: 查找结果根据从远到近排序。
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
本文由 huzd 创作,采用 知识共享署名4.0 国际许可协议进行许可本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名最后编辑时间
为:
2021/02/18 09:20