首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

看用 Redis 如何实现「​附近的人」​功能?

前言:针对“附近的人”这一位置服务领域的应用场景,常见的可使用PG、MySQL和MongoDB等多种DB的空间索引进行实现。...要提供完整的“附近的人”服务,最基本的是要实现“增”、“删”、“查”的功能。以下将分别进行介绍,其中会重点对查询功能进行解析。...其中,组合使用GEOADD和GEORADIUS可实现“附近的人”中“增”和“查”的基本功能。 要实现信中“附近的人”功能,可直接使用GEORADIUSBYMEMBER命令。...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)) 其中N为指定半径范围内的位置元素数量,而M则是被九宫格圈住计算距离的元素的数量。

92050

附近的人,用redis也能实现?(GEO)

点击上方蓝字关注我们 相信附近的人的功能大家都应该用过 我可以很随意的通过我自己的定位能看到我附近的人,并且能看到那个人距离我的距离,大家有没有思考过这个是怎么实现的?...获取自己的位置 附近的人其实就是一种位置的比对关系,所以第一步是得获取自己的位置,一般位置都是用经纬度来表示,具体经纬度的获取得依赖客户端,作为咱们后端程序员直接接收参数就可以了,所以这一步重点是用经纬度来表示各个节点的位置...* 6378.137 * 1000; return $s; } 筛选出距离和自己在 5km 以内的数据就是我们想得到的结果 把上次算出来的距离一一对比,在 5km 以内的数据就是我们需要的附近的人的数据...,又是一遍所有数据的遍历 如果符合附近的人的要求是需要按照距离从近到远来排序,又得遍历计算 上述方式如果用户量比较小其实是可以实现的,但是现在移动互联网公司一般用户体量都很大,全表遍历的方式基本都可以...因为查看附近的人的位置信息也在 nearBy 中,所以显然用 GEORADIUSBYMEMBER 比较合适 GEORADIUSBYMEMBER nearbyPeople user_n 5 km WITHDIST

65710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Redis 实现「附近的人

    前言:针对“附近的人”这一位置服务领域的应用场景,常见的可使用PG、MySQL和MongoDB等多种DB的空间索引进行实现。...要提供完整的“附近的人”服务,最基本的是要实现“增”、“删”、“查”的功能。以下将分别进行介绍,其中会重点对查询功能进行解析。...其中,组合使用GEOADD和GEORADIUS可实现“附近的人”中“增”和“查”的基本功能。要实现信中“附近的人”功能,可直接使用GEORADIUSBYMEMBER命令。...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M))。

    72520

    利用 Redis 实现“附近的人”功能!

    针对“附近的人”这一位置服务领域的应用场景,常见的可使用 PG、MySQL 和 MongoDB 等多种 DB 的空间索引进行实现。...要提供完整的“附近的人”服务,最基本的是要实现“增”、“删”、“查”的功能。 以下将分别进行介绍,其中会重点对查询功能进行解析。...其中,组合使用 GEOADD 和 GEORADIUS 可实现“附近的人”中“增”和“查”的基本功能。 要实现信中“附近的人”功能,可直接使用 GEORADIUSBYMEMBER 命令。...不过本质上,GEORADIUSBYMEMBER=GEOPOS+GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...并可推算出 Redis 中 GEORADIUS 查找附近的人功能,时间复杂度为:O(N+log(M))。 其中 N 为指定半径范围内的位置元素数量,而 M 则是被九宫格圈住计算距离的元素的数量。

    99620

    如何搞【附近的人】---挖坑开篇(一)

    附近的人 众所周知,老李的【前前任】可能是国内最大的陌生渣滓聚集地,陌生渣滓聚集地的本质是啥? 搞附近的人 我连续“ 搞了将近三年附近的人 ”,然后后来的事儿群里的宝贝儿也都知道了:我离职跑路了。...考虑到在座各位的人性偏好问题,我决定来一波儿搞【附近人】的API 这是你们的本能,不以你们的意志力为转移 文章将从简单到稍微复杂,从业务到架构,从单体服务到服务拆分,从能用到高可用,从单点到横向扩展,而且我真的不割韭菜不要钱...劳烦诸位动手扒下来Ti-RPC快速启动HTTP API服务:https://github.com/elarity/ti-rpc 安装好Redis和MySQL 这是一个“ 人人都是PM ”的年代,每天无数论坛、群里...你要做一个搞【附近的人】的APP,第一期的大概功能有如下几条: 常规登陆、注册功能,上传头像和修改昵称 列表形式,发现附近的人 给发现的附近的人留言 总体说下来,界面就跟下面这个差不多: ?...登陆、注册这些都是常规业务功能,直接复制粘贴CRUD就可以了,唯一的难点在于: 如何发现附近的人 在正式开工前,你需要调研一下:实现LBS的方案都有哪些,他们的原理是什么,优缺点是什么,选哪个更合适。

    60210

    Redis 是怎么实现 “附近的人” 的?

    针对“附近的人”这一位置服务领域的应用场景,常见的可使用PG、MySQL和MongoDB等多种DB的空间索引进行实现。...要提供完整的“附近的人”服务,最基本的是要实现“增”、“删”、“查”的功能。以下将分别进行介绍,其中会重点对查询功能进行解析。...其中,组合使用GEOADD和GEORADIUS可实现“附近的人”中“增”和“查”的基本功能。 要实现信中“附近的人”功能,可直接使用GEORADIUSBYMEMBER命令。...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)) 其中N为指定半径范围内的位置元素数量,而M则是被九宫格圈住计算距离的元素的数量。

    1.4K10

    简单几步,实现 Redis 查询 “附近的人

    前言:针对“附近的人”这一位置服务领域的应用场景,常见的可使用PG、MySQL和MongoDB等多种DB的空间索引进行实现。...要提供完整的“附近的人”服务,最基本的是要实现“增”、“删”、“查”的功能。以下将分别进行介绍,其中会重点对查询功能进行解析。...其中,组合使用GEOADD和GEORADIUS可实现“附近的人”中“增”和“查”的基本功能。 要实现信中“附近的人”功能,可直接使用GEORADIUSBYMEMBER命令。...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)) 其中N为指定半径范围内的位置元素数量,而M则是被九宫格圈住计算距离的元素的数量。...------ 我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧点击加群,享受一起成长的快乐。

    61120

    如何实现查找附近的人-GEO

    背景打开美团,可以通过自身定位查看附近的商品。打开社交软件,可以查看附近的人交友。打开滴滴,可以查看的附近的共享单车,那这些是如何实现?...> jedis 5.1.0 附近的门店查找附近的门店...我想喝一杯瑞幸咖啡,打开瑞幸的小程序,根据自身当前定位,查看下我附近都有哪些门店,哪个离我最近,那我就在哪个门店下单。...查询如果频繁,这个key容易成为热key,可以使用redis集群,同样的数据多设置几个key,比如:store_1,store_2,store_3 ,查询的时候可以根据用户id取余,命中不同的key查询附近的人社交软件...,经常看到附近的人,怎么做呢实现思路打开软件,当点击附近的人,定位自身的坐标根据自身的坐标,去查询附近附近的人代码实现 public static void main(String[] args) {

    39120

    小程序里附近的人功能实现,云开发数据库实现附近的人附近多少公里内的好友

    文末有源码 最近好多同学问石头哥附近的人如何实现。今天呢,就借助这篇文章,给大家做一个系统的解答。...接下来就教大家如何实现附近的位置。 一,创建数据 首先我们查询附近的人的时候,需要先有附近人的位置,也就是经纬度。这里我以几个城市的经纬度为例。...二,查找附近的人 我们查找附近的人,肯定是想按照排序由近到远的显示附近的人在地图上,所以这里我们就要用到geoNear做聚合查询。...五,在地图上显示附近的人 既然位置都已经查询到了,我们就可以在地图上显示了,地图上显示用到了map组件的markers [watermark,type_ZmFuZ3poZW5naGVpdGk,shadow...longitude = res.longitude console.log('当前在杭州的经纬度', res.longitude, res.latitude) //2,查找附近的人

    1K30

    如何搞【附近的人】---挖坑开篇(一)

    附近的人 众所周知,老李的【前前任】可能是国内最大的陌生渣滓聚集地,陌生渣滓聚集地的本质是啥? 搞附近的人 我连续“ 搞了将近三年附近的人 ”,然后后来的事儿群里的宝贝儿也都知道了:我离职跑路了。...考虑到在座各位的人性偏好问题,我决定来一波儿搞【附近人】的API 这是你们的本能,不以你们的意志力为转移 文章将从简单到稍微复杂,从业务到架构,从单体服务到服务拆分,从能用到高可用,从单点到横向扩展,而且我真的不割韭菜不要钱...劳烦诸位动手扒下来Ti-RPC快速启动HTTP API服务:https://github.com/elarity/ti-rpc 安装好Redis和MySQL 这是一个“ 人人都是PM ”的年代,每天无数论坛、群里...你要做一个搞【附近的人】的APP,第一期的大概功能有如下几条: 常规登陆、注册功能,上传头像和修改昵称 列表形式,发现附近的人 给发现的附近的人留言 总体说下来,界面就跟下面这个差不多: ?...登陆、注册这些都是常规业务功能,直接复制粘贴CRUD就可以了,唯一的难点在于: 如何发现附近的人 在正式开工前,你需要调研一下:实现LBS的方案都有哪些,他们的原理是什么,优缺点是什么,选哪个更合适。

    54650

    附近的人位置距离计算方法

    附近的人的位置用经纬度表示,然后通过两点的经纬度计算距离。根据网上的推荐,最终采用geohash。...这样,若仅仅只按中心区域0110搜索附近的人反而不是正确的。于是引入周围8个区域的点。这样,可以把0110区域的人附近的点全部包含。...位于中心区域0110的人最大附近距离为:两个对角线b=2√2len。最小距离为:a=len 再次重申:可以肯定搜索到一个精度内的所有人,但还可以包含附近大于一个精度达部分人。...由于geohash区域内的人共享一个查询,因此将geohash的前缀作为key来缓存该区域附近的点。那么,其他该区域的人也可以使用本次查询的结果。 用java做分页处理。 第一次请求,所有数据缓存。...需求是附近的人,而我查看附近的人的翻页频率并不高,也就是说每次计算的次数很少。那我可以不用为了减少部分计算而加大存储。因为加大存储需要空间加倍,而减少计算影响不大。所以放弃每人都缓存数据。

    2.1K70

    揭开Redis“附近的人”的神秘面纱

    来源:https://juejin.im/post/5da40462f265da5baf410a11 前言:针对“附近的人”这一位置服务领域的应用场景,常见的可使用PG、MySQL和MongoDB等多种...要提供完整的“附近的人”服务,最基本的是要实现“增”、“删”、“查”的功能。以下将分别进行介绍,其中会重点对查询功能进行解析。...其中,组合使用GEOADD和GEORADIUS可实现“附近的人”中“增”和“查”的基本功能。 要实现信中“附近的人”功能,可直接使用GEORADIUSBYMEMBER命令。...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)) 其中N为指定半径范围内的位置元素数量,而M则是被九宫格圈住计算距离的元素的数量。

    97820

    用 Redis 查询 “附近的人” !妙啊!

    针对“附近的人”这一位置服务领域的应用场景,互联网应用几乎每天都会用到,比如搜附近的美食,周边游等等;常见的可使用PG、MySQL和MongoDB等多种DB的空间索引进行实现。...要提供完整的“附近的人”服务,最基本的是要实现“增”、“删”、“查”的功能。以下将分别进行介绍,其中会重点对查询功能进行解析。...其中,组合使用GEOADD和GEORADIUS可实现“附近的人”中“增”和“查”的基本功能。要实现信中“附近的人”功能,可直接使用GEORADIUSBYMEMBER命令。...不过本质上,GEORADIUSBYMEMBER = GEOPOS + GEORADIUS,即先查找用户位置再通过该位置搜索附近满足位置相互距离条件的其他用户对象。...并可推算出Redis中GEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M))。

    26240

    使用Redis实现附近的人及打车服务

    面向LBS应用的GEO数据类型 各种社交软件里面都有附件的人的需求,在该应用中,我们查询附近 1 公里的食客,同时只需查询出 20 个即可。...如打车服务: 每辆网约车都有个编号(如666),网约车需将自己的经度、纬度发给叫车应用 打车时,打车应用会根据用户的经纬度位置,查找用户的附近车辆,并匹配 等把位置相近的用户和车辆匹配后,打车应用就会根据车辆编号...将所有方格的编码值映射到一维空间,相邻方格GeoHash编码值也接近: 所以,使用Sorted Set范围查询得到的相近编码值,在实际地理空间也是相邻方格,即可实现LBS应用“附近的人”。...如下命令即可将ID=33车辆的当前经纬度存入GEO集合: GEOADD cars:locations 116.034579 39.030452 33 当用户想寻找自己附近的网约车,LBS应用就能使用GEORADIUS...更新坐标 查找附近的人

    1.2K20
    领券