美文网首页
redis中的geo类型实现微信中附近的人功能

redis中的geo类型实现微信中附近的人功能

作者: frankie_cheung | 来源:发表于2020-05-14 23:38 被阅读0次

偶然在掘金看到的一篇帖子,觉得有点意思,所以自己也动手试一下。
原文章在这里,感兴趣的可以读一下:
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)。

image.png

相关文章

网友评论

      本文标题:redis中的geo类型实现微信中附近的人功能

      本文链接:https://www.haomeiwen.com/subject/btpfohtx.html