简介
Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。
Redis GEO 操作方法有:
- geoadd:添加地理位置的坐标。
- geopos:获取地理位置的坐标。
- geodist:计算两个位置之间的距离。
- georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
- georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。
- geohash:返回一个或多个位置对象的 geohash 值。
1.geoadd
geoadd 用于存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。
geoadd 语法格式如下:
GEOADD key longitude latitude member [longitude latitude member ...]
实例
127.0.0.1:6379> geoadd china:city 112.98 28.25 changsha
(integer) 1
127.0.0.1:6379> geoadd china:city 106.54 29.40 chongqing
(integer) 1
127.0.0.1:6379> geoadd china:city 116.23 40.27 beijin
(integer) 1
127.0.0.1:6379> geoadd china:city 125.28 43.83 changchun
(integer) 1
2.geopos
geopos 用于从给定的 key 里返回所有指定名称(member)的位置(经度和纬度),不存在的返回 nil。
geopos 语法格式如下:
GEOPOS key member [member ...]
实例
127.0.0.1:6379> geopos china:city beijin
1) 1) "116.23000055551528931"
2) "40.27000094346310988"
3.geodist
geodist 用于返回两个给定位置之间的距离。
geodist 语法格式如下:
GEODIST key member1 member2 [m|km|ft|mi]
#member1 member2 为两个地理位置。
最后一个距离单位参数说明:
- m :米,默认单位。
- km :千米。
- mi :英里。
- ft :英尺。
实例
127.0.0.1:6379> geodist china:city beijin changchun
"845189.1947"
127.0.0.1:6379> geodist china:city beijin chongqing km
"1495.9844"
127.0.0.1:6379> geodist china:city beijin changsha km
"1369.6265"
4.georadius、georadiusbymember
georadius
以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
georadiusbymember
和GEORADIUS 命令一样
, 都可以找出位于指定范围内的元素, 但是georadiusbymember
的中心点是由给定的位置元素决定的, 而不是使用经度和纬度来决定中心点。
georadius 与 georadiusbymember 语法格式如下:
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
GEORADIUSBYMEMBER key member 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: 查找结果根据从远到近排序。
georadius 实例:
127.0.0.1:6379> GEORADIUS china:city 110 40 1000 km
1) "beijin"
127.0.0.1:6379> GEORADIUS china:city 110 40 2000 km
1) "chongqing"
2) "changsha"
3) "beijin"
4) "changchun"
127.0.0.1:6379> GEORADIUS china:city 110 40 2000 km withdist withcoord
1) 1) "chongqing"
2) "1220.4252"
3) 1) "106.54000014066696167"
2) "29.39999880018641676"
2) 1) "changsha"
2) "1335.1640"
3) 1) "112.9800000786781311"
2) "28.25000087963665152"
3) 1) "beijin"
2) "530.5125"
3) 1) "116.23000055551528931"
2) "40.27000094346310988"
4) 1) "changchun"
2) "1332.1530"
3) 1) "125.27999907732009888"
2) "43.82999906870654172"
127.0.0.1:6379> GEORADIUS china:city 110 40 2000 km withdist withcoord count 2
1) 1) "beijin"
2) "530.5125"
3) 1) "116.23000055551528931"
2) "40.27000094346310988"
2) 1) "chongqing"
2) "1220.4252"
3) 1) "106.54000014066696167"
2) "29.39999880018641676"
georadiusbymember 实例:
127.0.0.1:6379> GEORADIUSBYMEMBER china:city changsha 5000 km
1) "chongqing"
2) "changsha"
3) "beijin"
4) "changchun"
5.geohash
Redis GEO 使用
geohash
来保存地理位置的坐标。
geohash
用于获取一个或多个位置元素的 geohash 值。
geohash 语法格式如下:
GEOHASH key member [member ...]
实例:
127.0.0.1:6379> geohash china:city beijin chongqing
1) "wx4thfujg20"
2) "wm5z22h53v0"
6.补充
Redis GEO 个查询删操作
127.0.0.1:6379> zrange china:city 0 -1
1) "chongqing"
2) "changsha"
3) "beijin"
4) "changchun"
127.0.0.1:6379> zrem china:city changchun
(integer) 1
127.0.0.1:6379> zrange china:city 0 -1
1) "chongqing"
2) "changsha"
3) "beijin"