前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >如何使用redis实现附近人的功能

如何使用redis实现附近人的功能

作者头像
AI码师
发布2020-11-19 15:59:57
发布2020-11-19 15:59:57
81400
代码可运行
举报
运行总次数:0
代码可运行

当两个元素相距不是很远,可以直接用勾股定理就能算出元素之间的距离,但是当我们的坐标是经纬度这种数据时,使用勾股定理就不容易计算了,那么如何计算两个经纬度之间的距离呢?如何筛选附近的人呢?

假如我们现在想要获取(x0,y0)坐标 附近为r的元素,可以这样去查询: select id from pos where x0-r < x <x0+r and y0-r <y <y0+r 但是把所有数据全部放到数据库中,肯定不是很好的解决方案,量大了就无法使用了。业界比较通用的计算距离的方法是geohsh算法,刚好redis也支持这种算法

redis如何支持

在redis中,geo将二维经纬度使用52位的整数进行编码,然后放入zset集合中,zset的value是key,scroe存储的是52位的整数值,然后通过score排序,算出附近的人。

基本指令

添加位置信息

代码语言:javascript
代码运行次数:0
复制
geoadd anhuiprovince 117.283043 31.861191 hefei
geoadd anhuiprovince 117.043549 30.508829 anqing
geoadd anhuiprovince 117.489159 30.656036 chizhou
geoadd anhuiprovince 118.317322 29.709238 huangshan

删除位置信息

代码语言:javascript
代码运行次数:0
复制
zrem anhuiprovince hefei anqing

获取元素间的距离

代码语言:javascript
代码运行次数:0
复制
# km,m ,ml,ft 代表距离单位
geodist anhuiprovince anqing hefei km[m,ml,ft]

获取某个元素的未知

代码语言:javascript
代码运行次数:0
复制
geopos anhuiprovince hefei

获取元素hash值

代码语言:javascript
代码运行次数:0
复制
geohash anhuiprovince hefei

获取附近的元素

代码语言:javascript
代码运行次数:0
复制
georadiusbymember key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
#示例 距离安庆152km的最多4个元素 升序排序
georadiusbymember anhuiprovince anqing 152 km count 4 asc

※:单个key一般都很大,一般部署geo的redis不建议做集群,key迁移时会很耗时间,另外当单个key非常大时,建议按不同维度进行查分。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乐哉开讲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 添加位置信息
  • 删除位置信息
  • 获取元素间的距离
  • 获取某个元素的未知
  • 获取元素hash值
  • 获取附近的元素
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档