Redis的3大特殊数据结构(3)-Geospatial

21 篇文章 0 订阅
14 篇文章 0 订阅
Redis3.2引入了对地理空间数据的支持,允许用户存储和查询地理位置信息。通过`geoadd`命令添加经纬度坐标到key,`geopos`获取坐标,`geodist`计算两点间距离,`georadius`查找一定范围内的位置,以及`georadiusbymember`基于成员的位置查找,这些功能使得Redis适合于实现如导航、社交应用中的附近搜索等功能。
摘要由CSDN通过智能技术生成

Geospatial地理空间,Redis 在 3.2 版本中加入了地理空间(geospatial)以及索引半径查询的功能,主要用在需要地理位置的应用上。将指定的地理空间位置(经度、纬度、名称)添加到指定的 key 中,这些数据将会存储到 sorted set
经度:longitude,有效返围[-180,180],正的表示东经,负的表示西经
纬度:latitude,有效返围[-85.05112878,85.05112878],正的表示北纬,负的表示南纬
地点经纬度查询添加链接描述

1.geoadd key longitude latitude member [longitude latitude member …]

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

127.0.0.1:6379> geoadd city 116.405285 39.904989 beijing
(integer) 1
127.0.0.1:6379> geoadd city 121.472644 31.231706 shanghai
(integer) 1
127.0.0.1:6379> geoadd city 113.280637 23.125178 guangzhou
(integer) 1
127.0.0.1:6379> geoadd city 114.085947 22.547 shenzhen
(integer) 1

在这里插入图片描述

2.geopos key member [member …]

geopos 获取指定城市的地理位置经纬度,可以从 key 里返回所有给定地理位置的经纬度

127.0.0.1:6379> geopos city beijing
1) 1) "116.40528291463851929"
   2) "39.9049884229125027"
127.0.0.1:6379> geopos city shanghai guangzhou
1) 1) "121.47264629602432251"
   2) "31.23170490709807012"
2) 1) "113.28063815832138062"
   2) "23.12517743834835215"

在这里插入图片描述

3.geodist key member1 member2 [m | km | ft | mi]

获取两个目的地之间的距离

  1. m 表示单位为米(默认)
  2. km 表示单位为千米
  3. mi 表示单位为英里
  4. ft 表示单位为英尺
 127.0.0.1:6379> geodist city beijing shanghai km
"1067.5980"
127.0.0.1:6379> geodist city beijing shanghai
"1067597.9668"

在这里插入图片描述

4.georadius key lopngitude latitude radius [m | km | ft | mi] [WITHCOORD] [WITHDIST] [COUNT count] [ASC|DESC] […]

以给定的经纬度为中心,返回与中心的距离不超过给定最大距离的所有位置元素

127.0.0.1:6379> geodist city beijing shenzhen  km     #北京到深圳距离
"1943.0240"
127.0.0.1:6379> geodist city beijing guangzhou km     #北京到广州距离
"1889.3706"
127.0.0.1:6379> geodist city beijing shanghai km      #北京到上海距离
"1067.5980"
127.0.0.1:6379> georadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [ST                      127.0.0.1:6379> georadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [ST                      127.0.0.1:6379> georadius city 116.405285 39.904989 1890km
(error) ERR wrong number of arguments for 'georadius' command
127.0.0.1:6379> georadius city 116.405285 39.904989 1890 km  #(116.405285,39.904989)距离1890km以内的地方
1) "guangzhou"
2) "shanghai"
3) "beijing"
127.0.0.1:6379> georadius city 116.405285 39.904989 1890 km WITHCOORD   #(116.405285,39.904989)距离1890km以内的地方带经纬度
1) 1) "guangzhou"
   2) 1) "113.28063815832138062"
      2) "23.12517743834835215"
2) 1) "shanghai"
   2) 1) "121.47264629602432251"
      2) "31.23170490709807012"
3) 1) "beijing"
   2) 1) "116.40528291463851929"
      2) "39.9049884229125027"
127.0.0.1:6379> georadius city 116.405285 39.904989 1890 km
1) "guangzhou"
2) "shanghai"
3) "beijing"
127.0.0.1:6379> georadius city 116.405285 39.904989 1890 km withdist  #(116.405285,39.904989)距离1890km以内的地方带距离
1) 1) "guangzhou"
   2) "1889.3707"
2) 1) "shanghai"
   2) "1067.5979"
3) 1) "beijing"
   2) "0.0002"
127.0.0.1:6379> georadius city 116.405285 39.904989 1890 km withcoord withdist count 2  #(116.405285,39.904989)距离1890km以内的地方只显示2个
1) 1) "beijing"
   2) "0.0002"
   3) 1) "116.40528291463851929"
      2) "39.9049884229125027"
2) 1) "shanghai"
   2) "1067.5979"
   3) 1) "121.47264629602432251"
      2) "31.23170490709807012"
127.0.0.1:6379> georadius city 116.405285 39.904989 1890 km withcoord withdist count 3
1) 1) "beijing"
   2) "0.0002"
   3) 1) "116.40528291463851929"
      2) "39.9049884229125027"
2) 1) "shanghai"
   2) "1067.5979"
   3) 1) "121.47264629602432251"
      2) "31.23170490709807012"
3) 1) "guangzhou"
   2) "1889.3707"
   3) 1) "113.28063815832138062"
      2) "23.12517743834835215"
127.0.0.1:6379> georadius city 116.405285 39.904989 1890 km withcoord withdist count 3 asc
1) 1) "beijing"
   2) "0.0002"
   3) 1) "116.40528291463851929"
      2) "39.9049884229125027"
2) 1) "shanghai"
   2) "1067.5979"
   3) 1) "121.47264629602432251"
      2) "31.23170490709807012"
3) 1) "guangzhou"
   2) "1889.3707"
   3) 1) "113.28063815832138062"
      2) "23.12517743834835215"
127.0.0.1:6379> georadius city 116.405285 39.904989 1890 km withcoord withdist count 1
1) 1) "beijing"
   2) "0.0002"
   3) 1) "116.40528291463851929"
      2) "39.9049884229125027"

在这里插入图片描述
在这里插入图片描述

5.georadiusbymember key member radius [m | km | ft | mi] [WITHCOORD] [WITHDIST] [COUNT count] [ASC|DESC] […]

返回给定元素位置给定距离范围以内的元素

127.0.0.1:6379> georadiusbymember  city beijing 2000 km withcoord  #返回距离北京2000km以内的地方带经纬度
1) 1) "shenzhen"
   2) 1) "114.08594459295272827"
      2) "22.54699993773966327"
2) 1) "guangzhou"
   2) 1) "113.28063815832138062"
      2) "23.12517743834835215"
3) 1) "shanghai"
   2) 1) "121.47264629602432251"
      2) "31.23170490709807012"
4) 1) "beijing"
   2) 1) "116.40528291463851929"
      2) "39.9049884229125027"
127.0.0.1:6379> georadiusbymember  city beijing 2000 km withdist  #返回距离北京2000km以内的地方带距离
1) 1) "shenzhen"
   2) "1943.0240"
2) 1) "guangzhou"
   2) "1889.3706"
3) 1) "shanghai"
   2) "1067.5980"
4) 1) "beijing"
   2) "0.0000"

在这里插入图片描述

6.geohash key member [member …]

获取给定元素hash计算结果

127.0.0.1:6379> geohash city beijing
1) "wx4g0b7xrt0"
127.0.0.1:6379> geohash city beijing shanghai
1) "wx4g0b7xrt0"
2) "wtw3sjt9vg0"

在这里插入图片描述

7.总结

常用于推算地理位置的信息,两地之间的距离,朋友定位,附近的人,打车距离计算…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值