redis 一个有趣且非常有用的功能 -->> 查询附近的人-GEO

简介

我们所处的任何位置都可以用经度和纬度来标识,经度的范围 -180 到 180,纬度的范围为 -90 到 90。纬度以赤道为界,赤道以南为负数,赤道以北为正数;经度以本初子午线(英国格林尼治天文台)为界,东边为正数,西边为负数。

GEO的使用

Redis 在 3.2 版本中增加了 GEO 类型用于存储和查询地理位置,关于 GEO 的命令不多,主要包含以下 6 个:
• geoadd:添加地理位置
• geopos:查询位置信息
• geodist:距离统计
• georadius:查询某位置内的其他成员信息
• geohash:查询位置的哈希值
• zrem:删除地理位置 下面我们分别来看这些命令的使用

基本使用

添加地理位置
我们先用百度地图提供的经纬度查询工具,
可以参考地址:http://api.map.baidu.com/lbsapi/getpoint/index.html
在这里插入图片描述

找以下示例 4 个地点,添加到 Redis 中
天安门:116.404269,39.913164
月坛公园:116.36,39.922461
北京欢乐谷:116.499705,39.874635
香山公园:116.193275,39.996348

geoadd site 116.404269 39.913164 tiananmen
(integer) 1
geoadd site 116.36 39.922461 yuetangongyuan
(integer) 1
geoadd site 116.499705 39.874635 huanlegu
(integer) 1
geoadd site 116.193275 39.996348 xiangshan
(integer) 1

在这里插入图片描述

重点参数
  • longitude 表示经度
  • latitude 表示纬度
  • member 是为此经纬度起的名字 此命令支持一次添加一个或多个位置信息。
查询位置信息
geopos site tiananmen

在这里插入图片描述

相关语法

geopos key member [member ...]

此命令支持查看一个或多个位置信息。
距离统计

127.0.0.1:6379> geodist site tiananmen yuetangongyuan km
"3.9153"

在这里插入图片描述

经纬度查询参考
https://www.hhlink.com/

相关语法

geodist key member1 member2 [unit]
unit 参数表示统计单位

它可以设置以下值:

• m:以米为单位,默认单位;
• km:以千米为单位;
• mi:以英里为单位;
• ft:以英尺为单位。

查询某位置内的其他成员信息
127.0.0.1:6379> georadius site 116.405419 39.913164 5 km
1) "tianan"
2) "yuetan"

此命令的意思是查询天安门(116.405419,39.913164)附近 5 公里范围内的成员列表。

相关语法

georadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC]
  1. WITHCOORD
    说明:返回满足条件位置的经纬度信息。
127.0.0.1:6379> georadius site 116.405419 39.913164 5 km withcoord
1) 1) "tiananmen"
   2) 1) "116.40426903963088989"
      2) "39.91316289865137179"
2) 1) "yuetangongyuan"
   2) 1) "116.36000186204910278"
      2) "39.92246025586381819"
  1. WITHDIST
    说明:返回满足条件位置与查询位置的直线距离。
127.0.0.1:6379> georadius site 116.405419 39.913164 5 km withdist
1) 1) "tiananmen"
   2) "0.0981"
2) 1) "yuetangongyuan"
   2) "4.0100"
  1. WITHHASH
    说明:返回满足条件位置的哈希信息。
127.0.0.1:6379> georadius site 116.405419 39.913164 5 km withhash
1) 1) "tiananmen"
   2) (integer) 4069885552230465
2) 1) "yuetangongyuan"
   2) (integer) 4069879797297521
  1. COUNT count
    说明:指定返回满足条件位置的个数。
    例如,指定返回一条满足条件的信息,代码如下:
127.0.0.1:6379> georadius site 116.405419 39.913164 5 km count 1
1) "tiananmen"

5.ASC|DESC
说明:从近到远|从远到近排序返回。

127.0.0.1:6379> georadius site 116.405419 39.913164 5 km desc
1) "yuetangongyuan"
2) "tiananmen"
127.0.0.1:6379> georadius site 116.405419 39.913164 5 km asc
1) "tiananmen"
2) "yuetangongyuan"

当然以上这些可选参数也可以一起使用

127.0.0.1:6379> georadius site 116.405419 39.913164 5 km withdist desc
1) 1) "yuetangongyuan"
   2) "4.0100"
2) 1) "tiananmen"
   2) "0.0981"

查询哈希值

geohash site tianan
1) "wx4g0cgp000"

相关语法:

geohash key member [member ...]

此命令支持查询一个或多个地址的哈希值。
删除地理位置

zrem site xiaoming
(integer) 1

相关语法:

zrem key member [member ...]

此命令支持删除一个或多个位置信息。

应用场景

Redis 中的 GEO 经典使用场景如下:
• 查询附近的人、附近的地点等;
• 计算相关的距离信息。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值