利用Redis的Geo功能实现查找附近的位置!

1. 前言

老板突然要上线一个需求,获取当前位置方圆一公里的业务代理点。明天上线!当接到这个需求的时候我差点吐血,这时间也太紧张了。赶紧去查相关的技术选型。经过一番折腾,终于在晚上十点完成了这个需求。现在把大致实现的思路总结一下。

2. MySQL 不合适

遇到需求,首先要想到现有的东西能不能满足,成本如何。

MySQL是我首先能够想到的,毕竟大部分数据要持久化到 MySQL 。但是使用 MySQL 需要自行计算 Geohash 。需要使用大量数学几何计算,并且需要学习地理相关知识,门槛较高,短时间内不可能完成需求,而且长期来看这也不是 MySQL 擅长的领域,所以没有考虑它。

Geohash 参考 https://www.cnblogs.com/LBSer...

2. Redis 中的GEO

Redis是我们最为熟悉的 K-V 数据库,它常被拿来作为高性能的缓存数据库来使用,大部分项目都会用到它。从 3.2 版本开始它开始提供了 GEO 能力,用来实现诸如附近位置、计算距离等这类依赖于地理位置信息的功能。 GEO 相关的命令如下:

Redis命令描述GEOHASH返回一个或多个位置元素的 Geohash 表示GEOPOS从key里返回所有给定位置元素的位置(经度和纬度)GEODIST返回两个给定位置之间的距离GEORADIUS以给定的经纬度为中心, 找出某一半径内的元素GEOADD将指定的地理空间位置(纬度、经度、名称)添加到指定的key中GEORADIUSBYMEMBER找出位于指定范围内的元素,中心点是由给定的位置元素决定

Redis会假设地球为完美的球形, 所以可能有一些位置计算偏差,据说<=0.5%,对于有严格地理位置要求的需求来说要经过一些场景测试来检验是否能够满足需求。

2.1 写入地理信息

那么如何实现目标单位半径内的所有元素呢?我们可以将所有的位置的经纬度通过上表中的 GEOADD 将这些地理信息转换为52位的 Geohash 写入 Redis 。

该命令格式:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值