美文网首页
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