4.6 GEO

  GEO即地址信息定位,可以用来存储经纬度,计算两地距离,范围计算等。这意味着我们可以使⽤Redis来实现美团和饿了么「附近的餐馆」,微信摇一摇等功能了。

使用场景

  我们看一下它的常用API

geoadd key longitude latitude member [longitude latitude member…] 增加地理位置信息

127.0.0.1:6379> geoadd cities:locations 116.28 39.55 beijing                # 添加北京的经纬度
(integer) 1
127.0.0.1:6379> geoadd cities:locations 117.12 39.08 tianjin 114.29 38.02 shijiazhuang    # 添加天津和石家庄的经纬度
(integer) 2
127.0.0.1:6379> geoadd cities:locations 118.01 39.38 tangshan 115.29 38.51 baoding         # 添加唐山和保定的经纬度
(integer) 2

geopos key member [member…] 获取地理位置信息

27.0.0.1:6379> geopos cities:locations tianjin     # 获取天津的地址位置信息
1) 1) "117.12000042200088501"
   2) "39.0800000535766543"

geodist key member1 member2 [unit] 获取两个地理位置的距离,unit:m(米),km(千米),mi(英里),ft(尺)

127.0.0.1:6379> geodist cities:locations tianjin beijing km
"89.2061"
127.0.0.1:6379> geodist cities:locations tianjin baoding km
"170.8360"

georedius key longitude latitude radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key][storedist key]

获取指定位置范围内的地理位置信息集合

  • withcoord:返回结果中包含经纬度
  • withdist:返回结果中包含距离中心节点位置
  • withhash:返回结果中包含geohash
  • COUNT count:指定返回结果的数量
  • asc|desc:返回结果按照距离中心节点的距离做升序或者降序
  • store key:将返回结果的地理位置信息保存到指定键
  • storedist key:将返回结果距离中心节点的距离保存到指定键
127.0.0.1:6379> georadiusbymember cities:locations beijing 150 km   # 获取距离北京150km范围内的城市
1) "beijing"
2) "tianjin"
3) "tangshan"
4) "baoding"

最后还需要补充

  1. Redis的GEO功能是从3.2版本添加
  2. geo功能基于zset实现
  3. geo没有删除命令
版权声明: 本文为智客工坊「沉晓」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

results matching ""

    No results matching ""