引言昨天一位公众号粉丝和我讨论了一道面试题,个人觉得比较有意义,这里整理了一下分享给大家,愿小伙伴们面试路上少踩坑。面试题目比较简单:“让你实现一个附近的人功能,你有什么方案?”,这道题其实主要还是考察大家对于技术的广度,本文介绍几种方案,给大家一点思路,避免在面试过程中语塞而影响面试结果,如有不严谨之处,还望亲人们温柔指正!“附近的人” 功能生活中是比较常用的,像外卖app附近的餐厅,共享单车a
这次跟门子轩写了个查找附近的人,功能是使用同一软件的人可以将地理位置信息上传到服务器,其他人可通过查找的功能将指定距离内的人的相关信息(包括地理位置信息)查找出来。其实没什么技术含量,整个工程中最核心的地方就是用到了百度地图提供的lbs接口,通过这个接口访问百度地图提供的数据库,可以实现对表的增删改查等命令,也可以精确的计算gps之间的距离。工程分为服务器与客户端,客户端可以上传GPS信息,服务器
转载 2023-06-30 23:46:07
117阅读
一、查询附近人:Geo指令,底层是普通的zst结构,提供7个命令1)添加指令:geoadd 指令携带集合名称以及多个经纬度名称三元组,注意这里可以加入多个三元组geoadd company 116.48105 39.996794 juejin2)计算距离:geodist 指令可以用来计算两个元素之间的距离,携带集合名称、2 个名称和距离单位geodist company juejin ireade
背景介绍:目前随着电商、社交、游戏和代购等的流行,“附近的人”这一功能提供了一种便捷的方式允许同一地区或者一定距离范围内的用户进行相互交流的途径,一般都是在用户点击某个菜单或按钮时记录用户的坐标信息,拿微信的“附近的人”功能举例子,如下图所示,当你在点击附近的人时微信服务端会提示获取你所在位置的经纬度,记录到服务端,右上角的小脚印就表示你的经纬度信息被记录。然后服务端会根据你的位置信息拉取附近同样
笔者之前文章介绍过geohash算法,那么今天,我们来讲一下Redis的geo功能。 GeoHash与Z阶曲线的关系 1 引言“附近的人”在社交类APP已成为标配的功能,简单一点的实现方式可以把坐标存至关系型数据库,通过计算的坐标点距离实现,这种计算可行但计算速度远不及内存操作级别的NoSql数据库。基于Redis的geo就可以轻松实现。2 Redis处理位置坐标点的思路Redis中经纬
# Java + Redis Geo 实现“附近的人”功能 在现代的应用开发中,地理信息的处理越来越重要。使用 Redis 的 Geo 功能,可以轻松实现“附近的人”这一功能。本文将介绍如何在 Java 中使用 Redis Geo API 来获取当前位置附近的人,并详细解析每一步的实现。 ## 文章结构 1. 流程概述 2. 环境准备 3. 步骤详解 - 3.1. 添加用户位置
原创 9月前
145阅读
# 使用 JavaRedis 实现查找附近的人 在当今的移动互联网时代,“附近的人”功能已经成为许多社交应用的标配。这种功能一般会基于用户的位置来推荐周围的人,提供更好的社交体验。本文将通过一个简单的示例,介绍如何使用 JavaRedis 来实现查找附近人的功能。 ## 一、项目背景 在本示例中,我们将使用 Redis 来存储用户的位置信息,利用 GeoHash 编码来快速查找附
原创 7月前
40阅读
针对“附近的人”这一位置服务领域的应用场景,常见的可使用 PG、MySQL 和 MongoDB 等多种 DB 的空间索引进行实现。 图片来自 Pexels而 Redis 另辟蹊径,结合其有序队列 ZSET 以及 GEOHASH 编码,实现了空间搜索功能,且拥有极高的运行效率。本文将从源码角度对其算法原理进行解析,并推算查询时间复杂度。要提供完整的“附近的人”服务,最基本的是要实现“增”
介绍早在15年的 Redis 3.2 开始就已提供了 GEO 相关方法,可用来实现 LBS 搜索:geoadd:增加某个地理位置的坐标geopos:获取某个地理位置的坐标geodist:获取两个地理位置的距离georadius:根据给定地理位置坐标获取指定范围内的地理位置集合。georadiusbymember:根据给定地理位置获取指定范围内的地理位置集合geohash:获取某个地理位置的 geo
之前分享过一篇《使用geohash实现查找附近的人》,其实redis在3.2版本之后也提供了地理位置的能力。geoadd命令该命令是添加地理位置信息,基本格式是:基于Redis实现查找附近的人 key:键名 longitude:经度 latitude:纬度 member:该位置名字 举个例子,我现在要添加福州的软件园的地理位置。首先我通过某歌地图搜索到软件园,右键地点,点击“这儿有什么”,就会弹出
转载 2023-07-11 20:37:44
162阅读
1. XMPP协议 与 OpenfireXMPP协议是IM领域的标准协议了,具体可参考  http://xmpp.org   及RFC6120,RFC6121,RFC6122等相关文档。 http://xmpp.org/xmpp-protocols/   XMPP协议实现,开源的也很多,server端可参考 http://xmpp.org/xmpp
转载 2024-05-22 16:12:29
27阅读
各种社交软件里面都有附件的人的需求,在该应用中,我们查询附近 1 公里的食客,同时只需查询出 20 个即可。解决基于地理位置的搜索,很多数据库品牌都支持:MySQL、MongoDB、Redis 等都能支持地理位置的存储。 当用户登录应用时,或者保持用户登录后用户在使用应用时,客户端是可以时刻获取用户位置信息的(前提是用户要开启位置获取的权限),客户端获取到最新的地理位置后,上传到后端服务器进行更
原创 2021-06-24 14:57:32
606阅读
文章目录1、GEOHash——如何“摇一摇”1-1、为什么需要GEOHash1-2、什么是GEOHash1-3、GEOHash编码的简易原理1-4、GEOHash的边缘问题2、Redis中GEOHash的应用GEOADD:增加地理位置的坐标(支持批量操作)GEOPOS:获取地理位置的坐标(支持批量操作)GEODIST:获取两个地理位置的距离GEORADIUS:根据给定地理位置坐标获取指定范围内的
前言当前大多数app都有查找附近的功能, 简单的有查找周围的运动场馆, 复杂的有滴滴, 摩拜查找周围的车辆. 本文主要阐述查找附近地点的一般实现.方案比较方案1 (性能还不错)数据库直接存经纬度, 然后计算矩形边界值, 走索引查询方案2 (还没试过)将经纬度转换成 一个值, 然后进行比较查询 genhash方案3 (据说高性能, 性能怎样?待测试)方案1的实现(本文主要阐述此方案)实现环境: ja
方案比较方案1 (性能还不错)    数据库直接存经纬度, 然后计算矩形边界值, 走索引查询方案2 (还没试过)    将经纬度转换成 一个值, 然后进行比较查询 genhash    方案3 (据说高性能, 性能怎样?待测试)    mo
转载 2023-09-26 05:09:21
66阅读
## 使用Java借助Redis实现附近的人 现在,很多社交应用都具有“附近的人”功能,可以让用户查看周围的其他用户。这个功能的实现需要考虑用户位置信息的存储和查询,而Redis作为一种高效的NoSQL数据库,可以很好地支持这个功能的实现。 ### Redis的地理位置数据结构 Redis提供了`GEO`相关的指令,可以用来存储和查询地理位置信息。在实现“附近的人”功能时,可以使用Redis
原创 2024-03-24 07:32:37
97阅读
当两个元素的距离不是很远时,可以直接使⽤勾股定理就能算得元素之间的距离。我们平时使⽤的「附近的⼈」的功能,元素距离都不是很⼤,勾股定理算距离⾜矣。不过需要注意的是,经纬度坐标的密度不⼀样 (地球是⼀个椭圆),勾股定律计算平⽅差时之后再求和时,需要按⼀定的系数⽐加权求和,如果不求精确的话,也可以不必加权。业界⽐较通⽤的地理位置距离排序算法是 GeoHash 算法,Redis 也使⽤ GeoHash
# 实现“Java附近的人”功能的指南 在这篇文章中,我们将学习如何实现一个“附近的人”功能,往往用于社交应用,帮助用户找到在自己附近的其他用户。功能的实现不仅涉及前端与后端的对接,同时也需要地理位置的处理与数据管理。在实现的过程中,我们将逐步分解任务,确保理解每一步。 ## 整体流程 以下是实现“附近的人”功能的基本流程: | 步骤 | 描述
原创 2024-09-28 06:47:02
76阅读
前言最近在做社交的业务,用户进入首页后需要查询附近的人;项目状况:前期尝试业务阶段;特点:快速实现(不需要做太重,满足初期推广运营即可)快速投入市场去运营收集用户的经纬度:用户在每次启动时将当前的地理位置(经度,维度)上报给后台提到附近的人,脑海中首先浮现特点:需要记录每位用户的经纬度查询当前用户附近的人,搜索在N公里内用户架构设计时序图技术实现方案SpringBootRedis(version&
文章目录前言GeoHash 算法简介常用命令 前言Redis 在 3.2 版本以后增加了地理位置 Geo 模块,意味着我们可以使用 Redis 来实现类似摩拜单车的“附近的共享单车”和微信“附近的人”这样的功能了。Redis 中 Geo 指令使用的是业界比较通用的地理位置距离排序算法 GeoHash 。GeoHash 算法简介GeoHash算法将二维的经纬度数据映射到一维的整数,这样所有的元素都
转载 2023-09-08 21:57:19
71阅读
  • 1
  • 2
  • 3
  • 4
  • 5