Redis3.2版本提供了GEO(地理信息定位)功能,支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能,对于需要实现这些功能的开发者来说是一大福音
增加地理位置信息
geoadd key longitude latitude member [longitude latitude member ...]
longitude、latitude、member分别是该地理位置的经度、纬度、成员
添加北京的位置信息
127.0.0.1:6379> geoadd cities 116.28 39.55 beijing
(integer) 1
如果添加成功返回1,已存在会返回0,如果是做修改操作同样使用geoadd,返回0
同时添加三个城市位置信息天津、上海和重庆
127.0.0.1:6379> geoadd cities 117.12 39.08 tianjin 121.47 31.23 shanghai 106.55 29.57 chongqing
(integer) 3
获取地理位置信息
geopos key member [member ...]
获取上海位置信息,同时获取上海和重庆的位置信息
127.0.0.1:6379> geopos cities shanghai
1) 1) "121.47000163793563843"
2) "31.22999903975783553"
127.0.0.1:6379> geopos cities shanghai chongqing
1) 1) "121.47000163793563843"
2) "31.22999903975783553"
2) 1) "106.5499994158744812"
2) "29.5700000136221135"
获取两个地理位置的距离
geodist key member1 member2 [unit]
unit代表单位,不填写默认返回单位是 m(米);可以输入以下四个单位
- m(meters)代表米
- km(kilometers)代表公里
- mi(miles)代表英里
- ft(feet)代表尺
获取上海和重庆的距离
127.0.0.1:6379> geodist cities shanghai chongqing
"1442064.7968"
127.0.0.1:6379> geodist cities shanghai chongqing km
"1442.0648"
获取指定位置范围内的地理信息位置集合
georadius key longitude latitude radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]
georadiusbymember key member radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]
georadius和georadiusbymember两个命令的作用是一样的,都是以一个地理位置为中心算出指定半径内的其他地理信息位置,不同的是georadius命令的中心位置给出了具体的经纬度,georadiusbymember只需给出成员即可。其中radiusm|km|ft|mi是必需参数,指定了半径(带单位),这两个命令有很多可选参数,如下所示
– withcoord:返回结果中包含经纬度
– withdist:返回结果中包含离中心节点位置的距离
– withhash:返回结果中包含geohash,有关geohash后面介绍
– COUNT count:指定返回结果的数量
– asc|desc:返回结果按照离中心节点的距离做升序或者降序
– store key:将返回结果的地理位置信息保存到指定键
– storedist key:将返回结果离中心节点的距离保存到指定键
获取北京1200km以内的城市
127.0.0.1:6379> georadiusbymember cities beijing 1200 km
1) "beijing"
2) "tianjin"
3) "shanghai"
获取geohash
geohash key member [member ...]
Redis使用geohash将二维经纬度转换为一维字符串,下面操作会返回beijing的geohash值
127.0.0.1:6379> geohash cities beijing
1) "wx48ypbe2q0"
删除地理位置信息
GEO没有提供删除成员的命令,但是因为GEO的底层实现是zset,所以可以借用zrem命令实现对地理位置信息的删除
zrem key member
删除北京的位置信息
127.0.0.1:6379> zrem cities beijing
(integer) 1