Redis学习笔记—地理信息定位(GEO)

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