redis中的geo类型实现微信中附近的人功能
2020-05-14 本文已影响0人
frankie_cheung
偶然在掘金看到的一篇帖子,觉得有点意思,所以自己也动手试一下。
原文章在这里,感兴趣的可以读一下:
https://juejin.im/post/5da40462f265da5baf410a11
Geo
redis3.2版本支持geo(地理坐标)的相关API,用于支持储存和查询这些地理场景中的坐标
基本命令
- GEOADD: 将给定的位置对象(纬度、经度、名字)添加到指定的key;
- GEOPOS: 从key里面返回所有给定位置对象的位置(经度和纬度);
- GEODIST: 返回两个给定位置之间的距离;
- GEOHASH: 返回一个或多个位置对象的Geohash表示;
- GEORADIUS: 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象;
- GEORADIUSBYMEMBER: 以给定的位置对象为中心,返回与其距离不超过给定最大距离的所有位置对象。
GEORADIUS和GEORADIUSBYMEMBER的区别为:
GEORADIUS是给定一个经纬度,查看集合内和他范围内匹配的有多少。使用场景:大众点评获取到你的经纬度,查看你周边有几个饭店。
GEORADIUSBYMEMBER 是给定一个集合内的一个用户,看和他范围内的匹配的用户,例如 微信附近的人,给定一个人,给你展示你周边附近都有那些人。
灌数据
首先我们写入几条北京经纬度的数据
image.png
返回小红的坐标
查看xiaohong周边一千米都有谁,当然这个集合内也包含xiaohong
可以看到着里面有xiaoming
附近的人排序列表实现
命令
GEORADIUSBYMEMBER beijing_fujinderen_list xiaohong 5 km withdist asc
这句命令为按照xiaohong作为中心点,找她周边5km的人,以距离作为排序方式(withdist )进行降序展示(asc)。