基于Redis实现查找附近的人/排行榜
引言
在日常使用的有些APP中,如什么微信,百度地图,可以搜寻附近的人,距离自己多远,以及在地图上我们可以搜索附近的某个地点,距离自己的位置。针对这种类似的功能,我们可以通过redis就能实现。
redis在3.2版本之后也提供了地理位置的能力,使用redis可以轻松实现查找附近的人。
一:附近的人(地)
1:geoadd命令
该命令是添加地理位置信息,基本格式是:
举个例子:我现在要添加东合中心的地理位置,先定位出东合中心的经纬度坐标位置114.17135 30.51155,然后在redis中添加经纬度位置
geoadd position 114.17135 30.51155 dhzx |
要注意的是,某歌地图搜出来的坐标,纬度在前,经度在后,而redis命令是相反的
如果要一次添加多个位置,直接在后面追加经纬度和member即可,接下来我们添加 体育中心,长江大桥的经纬度位置
1 | geoadd position 114.17701 30.51159 tyzx 114.29901 30.55315 cjdq |
2:geodist命令
该命令是计算两个位置的距离,我们已经添加了三个位置,接下来我们可以计算东合中心-长江大桥的两地之间的距离
1 | geodist position dhzx cjdq |
默认单位是米,同时也支持其他单位:
- m:米
- km:公里
- mi:英里
- ft:英尺
3:georadius命令
该命令是找出指定坐标点一定距离内的位置,基本格式是:
#获取体育中心方圆1公里内的地点 (有东合中心 、体育中心两个)
后面可选参数主要是针对查询结果做一些处理:
这些参数不一一演示,就演示WITHCOORD、WITJDIST、ASC
到这里,相信你已经可以使用redis实现“查到附近的人”了
4:georadiusbymember命令
该命令同样是找出距离指定位置n米距离内的点位,与georadius的区别是:
georadius是指定坐标点来搜索,而georadiusbymember是指定member来搜索,
5:geohash命令
该命令是计算某位置的hash值,基本格式如下:
6:geopos命令
获取指定位置的坐标:
二:排行榜
排行榜的功能主要是基于redia的Zset进行实现的,ZSet数据结构类似于Set结构,只是ZSet结构中,在set基础上加入了一个score字段,通过利用score进行相关的排序。
每个元素都会有一个分值(score),然后所有元素按照分值的大小进行排列,相当于是一个进行了排序的链表。
http://www.javajun.net/posts/13563/index.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端