企业级Redis开发运维从入门到实践 (14)— GEO

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zx711166/article/details/82857292

GEO是什么

GEO(地理信息定位):存储经纬度,计算两地距离,范围计算等。

应用场景

  • 类似微信中摇一摇,找出范围内的用户。
  • 类似美团中酒店查询,找出范围内的酒店。在这里插入图片描述

5个城市经纬度

城市 纬度 经度 简称
北京 116.28 39.55 beijing
天津 117.12 39.08 tianjin
石家庄 114.29 38.02 shijiazhuang
唐山 118.01 39.38 tangshan
保定 115.29 38.51 baoding

GEO的相关命令

geoadd
  • GEOADD key longitude latitude member [longitude latitude member …]:增加地理位置信息(纬度、经度、名字)。
  • 有效的经度介于 -180 度至 180 度之间。
  • 有效的纬度介于 -85.05112878 度至 85.05112878 度之间。
  • 时间复杂度:每添加一个元素的复杂度为 O(log(N)) , 其中 N 为键里面包含的位置元素数量。
redis> geoadd cities:locations 116.26 39.55 beijing
(integer) 1

# 再添加一次依然可以添加成功
redis> geoadd cities:locations 116.26 39.55 beijing
(integer) 1

# 添加多个地理位置
redis> geoadd cities:locations 17.12 39.08 tianjin 14.29 38.02 shijiazhuang 118.01 39.38 tangshan 115.29 38.51 baoding
(integer) 4
geopos
  • geopos key member [member …]:获取地理位置信息。
  • 时间复杂度:获取每个位置元素的复杂度为 O(log(N)) , 其中 N 为键里面包含的位置元素数量。
redis> geoadd cities:locations tianjin
1) 1)"17.12000042200088501"
	   2)"39.0800000535766543"
geodist
  • geodist key member1 member2 [unit]:获取两个地理位置的距离。
  • unit:m(米)、km(千米)、mi(英里)、ft(尺)。
  • 复杂度:O(log(N))。
redis> geodist cities:locations tianjin beijing km
"89.2061"
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]:这个命令和 georadius命令一样, 都可以找出位于指定范围内的元素, 但是 georadiusbymember 的中心点是由给定的位置元素决定的, 而不是像 georadius那样, 使用输入的经度和纬度来决定中心点。
  • withcoord:返回结果中包含经纬度。
  • withdist:返回结果中包含距离中心节点位置。
  • withhash:返回结果中包含geohash。
  • COUNT count:指定返回结果数量。
  • asc|desc:返回结果按照距离中心节点的距离做升序或者降序。
  • store key:将返回结果的地理位置信息保存再指定键。
  • storedist key:将返回结果距离中心节点的距离保存到指定键。
redis> georadiusbymember cities:locations beijing 150 km
1)  "beijing"
2)  "tianjin"
3)  "tangshan"
4)  "baoding"

相关说明

  1. since 3.2+,3.2及以上版本增加geo。
  2. type geoKey = zset,geo使用有序集合实现的。
  3. 没有删除API:zrem key member。

猜你喜欢

转载自blog.csdn.net/zx711166/article/details/82857292
GEO