redis geo 地理位置系应用战案例
admin
2023-01-27 23:59:59
0次

专有名词
geographic 地理
radius 半径范围; 半径(距离); 用半径度量的圆形面积

redis GEO实现

redis GEO实现主要包含了以下两项技术:

1、使用geohash保存地理位置的坐标。
2、使用有序集合(sort set)保存地理位置的集合。(重点:基于sort set存储)

redis GEO 方法列表

  1. geoadd

含义:

将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。

语法:

GEOADD key longitude latitude member [longitude latitude member]

实现:

geoadd city_clusters 116.405285 39.904989 beijing  121.472644 31.231706 shanghai
  1. geopos

含义:

从key里返回所有给定位置元素的位置(经度和纬度)

语法:

GEOPOS key member [member ...]

实现:

127.0.0.1:6379> geopos city_clusters beijing shanghai
1) 1) "116.40528291463851929"
   2) "39.9049884229125027"
2) 1) "121.47264629602432251"
   2) "31.23170490709807012"
  1. geodist

含义:

返回两个给定位置之间的距离。
备注:
指定单位的参数 unit 必须是以下单位的其中一个:
m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位。

语法:

GEODIST key member1 member2 [unit]

实现:

127.0.0.1:6379> geodist city_clusters beijing shanghai km
"1067.5980"
127.0.0.1:6379> geodist city_clusters beijing shanghai
"1067597.9668"
  1. geohash

含义:

返回一个或多个位置元素的 Geohash 表示。
作用:将二维的经纬度转换成字符串。

语法:

GEOHASH key member [member ...]

实现:

127.0.0.1:6379> geohash city_clusters beijing
1) "wx4g0b7xrt0"
127.0.0.1:6379> geohash city_clusters beijing shanghai
1) "wx4g0b7xrt0"
2) "wtw3sjt9vg0"
  1. georadius

含义:

以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
备注:
范围可以使用以下其中一个单位:
m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
在给定以下可选项时, 命令会返回额外的信息:
WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。
WITHCOORD: 将位置元素的经度和维度也一并返回。
WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。

COUNT限定返回的记录数

命令默认返回未排序的位置元素。 通过以下两个参数, 用户可以指定被返回位置元素的排序方式:
ASC: 根据中心的位置, 按照从近到远的方式返回位置元素。
DESC: 根据中心的位置, 按照从远到近的方式返回位置元素。

语法:

GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

实现:

 georadius city_clusters 114.546569 30.496705 1000 km withdist withcoord withhash  count 3 asc  
1) 1) "wuhan"
   2) "0.0002"
   3) (integer) 4051940381831537
   4) 1) "114.54657107591629028"
      2) "30.49670420836107354"
2) 1) "ezhou"
   2) "34.4580"
   3) (integer) 4051965036178493
   4) 1) "114.88938957452774048"
      2) "30.40377626121739496"
3) 1) "shanghai"
   2) "666.1872"
   3) (integer) 4054803464817068
   4) 1) "121.47264629602432251"
      2) "31.23170490709807012
  1. georadiusbymember

含义:

和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的, 而不是像 GEORADIUS 那样, 使用输入的经度和纬度来决定中心点
备注:
同georadius

语法:

GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

实现:

 georadiusbymember city_clusters ezhou 1000 km withcoord withdist withhash count 10 asc
1) 1) "ezhou"
   2) "0.0000"
   3) (integer) 4051965036178493
   4) 1) "114.88938957452774048"
      2) "30.40377626121739496"
2) 1) "wuhan"
   2) "34.4578"
   3) (integer) 4051940381831537
   4) 1) "114.54657107591629028"
      2) "30.49670420836107354"
3) 1) "shanghai"
   2) "635.4470"
   3) (integer) 4054803464817068
   4) 1) "121.47264629602432251"
      2) "31.23170490709807012"

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...