首页/新闻资讯/正文详情

Redis Geo实现地理位置检索

发布时间:2026/9/27 2:57:09 来源:云帆数科 栏目:资讯中心
Redis Geo实现地理位置检索
做业务开发时我们经常遇到这类需求✅ 同城筛选附近门店、外卖骑手匹配✅ 社交APP附近的人、同城动态✅ 网约车就近派单、地理位置打卡面对这些地理位置检索场景无需引入笨重的专业GIS引擎Redis自带的GEO地理空间索引是一个轻量、高性能的方案。Redis GeoRedis Geo 没有创造新结构完全基于有序集合 Sorted SetZSet实现底层核心组合GeoHash 编码 Sorted Set 索引。简单来说就是把二维的经纬度坐标通过算法压缩成一维整数分值利用ZSet天然的排序、范围检索能力实现高效的地理位置查询。Key地理集合名如 stores:location 门店位置集合Member位置唯一标识店铺ID、用户ID、设备IDScore经纬度编码后的52位GeoHash整数排序、检索的核心GeoHash 编码GeoHash的核心价值将二维经纬度转化为可排序、可比对的一维字符串。相近的地理位置会拥有高度相似的编码前缀这也是“附近查询”能够高效实现的根本原因。GeoHash编码流程区间划分针对地球经度范围[-180, 180]与纬度范围[-90, 90]开展持续的二分操作二进制编码在每次二分过程中依据目标点所处区间左区间记为0右区间记为1生成对应的二进制位且经度与纬度的编码过程交替进行Base32编码将生成的二进制数据流按每5位为一组转换为Base32字符核心命令命令 作用GEOADD key longitude latitude member […] 添加一个或多个地理位置GEOPOS key member […] 获取指定成员的经纬度信息GEODIST key member1 member2 [unit] 计算两个成员之间的直线距离GEOHASH key member […] 获取成员对应的GeoHash编码主要用于调试场景GEOSEARCH key FROMMEMBER member BYRADIUS radius unit […] 以已存储的成员为中心检索指定圆形区域内的位置GEOSEARCH key FROMLONLAT lng lat BYRADIUS radius unit […] 以给定的经纬度为中心检索指定圆形区域内的位置GEOSEARCH key FROMLONLAT lng lat BYBOX width height unit […] 检索指定矩形区域内的位置GEORADIUS key FROMLONLAT lng lat BYBOX width height unit […] 检索指定矩形区域内的位置该命令已废弃实战演练实现「附近店铺」功能将店铺位置录入Redis将店铺的经纬度信息添加至Redis数据库GEOADD storeId:location 116.48 39.95 store:1001GEOADD storeId:location 116.50 39.96 store:1002GEOADD storeId:location 116.30 39.90 store:1003 该操作支持批量添加可一次性录入多个位置信息能有效提升操作性能。检索附近的店铺当用户A位于(116.48, 39.95)时若需查询5公里范围内的店铺可执行如下操作GEOSEARCH storeId:locationFROMLONLAT 116.48 39.95 \ # 以指定经纬度为中心BYRADIUS 5 km \ # 搜索半径5公里WITHDIST \ # 返回距离中心点的距离WITHCOORD \ # 返回目标的经纬度COUNT 20 ASC # 最多20条由近及远排序Redis 6.2 以下旧版本可使用以下命令GEORADIUS storeId:location 116.48 39.95 5 km WITHCOORDJava代码Servicepublic class LocationService {Autowiredprivate RedisTemplateString, String redisTemplate;private static final String GEO_KEY “storeId:location”;public void updateLocation(Long storeId, double lng, double lat) { // 先删旧位置再添加新位置 redisTemplate.opsForGeo().remove(GEO_KEY, storeId.toString()); redisTemplate.opsForGeo().add(GEO_KEY, new Point(lng, lat), storeId.toString()); } public GeoResultsRedisGeoCommands.GeoLocationString findNearby(double lng, double lat, double radius) { Circle circle new Circle(new Point(lng, lat), new Distance(radius, Metrics.KILOMETERS)); return redisTemplate.opsForGeo().radius(GEO_KEY, circle, RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs() .includeDistance() .includeCoordinates() .sortAscending() .limit(20));

相关推荐

VS Code 调试 Rasa 自定义动作全链路实战指南
VS Code 调试 Rasa 自定义动作全链路实战指南

1. 项目概述:为什么用 VS Code 做 Rasa 自定义动作开发,而不是直接敲命令行或硬扛 Web UIRasa 的自定义动作(Custom Actions)是整个对话系统真正“活起来”的关键——它让机器人能查数据库、调第三方 API、执行业务逻辑、甚至触发… · 2026/9/8 19:22:46

数据科学工作流12大关键工具与防错实践指南
数据科学工作流12大关键工具与防错实践指南

1. 这不是工具清单,而是一份数据科学工作流的“生存地图”2022年我带团队重构三个核心业务的数据分析体系时,发现一个扎心的事实:90%的新手在学完Python基础后,立刻扑向Jupyter Notebook,写完几行pandas代码就以为自己… · 2026/9/14 5:43:46

MLOps生产落地四主线:服务韧性、实时特征、可观测性与自动再训练
MLOps生产落地四主线:服务韧性、实时特征、可观测性与自动再训练

1. 项目概述:这不是一次“部署上线”演练,而是一场真实世界的ML交付压力测试“From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题里藏着一个被太多人轻描淡写、却让无数团队在凌晨三点反复刷新日志的真相:N… · 2026/8/11 1:39:46

【k8s】全新Ubuntu 26.04 使用kt 超简单安装 k8s 最新1.37.1+KubeSphere4.1.3
【k8s】全新Ubuntu 26.04 使用kt 超简单安装 k8s 最新1.37.1+KubeSphere4.1.3

项目文档:kt 文档 操作系统刚发新版,内核、cgroup、包管理都换了代;k8s 又往前推了一版,容器运行时、CNI、etcd 得跟着对齐版本。这两件事叠在一起,通常意味着一整个下午的搜索和反复的环境排错。 再叠上离线&#xf… · 2026/9/27 2:56:55

门户网站的种类全解析,选哪家更靠谱
门户网站的种类全解析,选哪家更靠谱

门户网站的种类全解析,选哪家更靠谱 备案流程一头雾水,填表时对着“网站类别”那一栏发呆?很多人找 哪家好 的服务商,结果被各种术语绕晕。其实搞懂 门户网站的种类 ,比选模板重要十倍。 一、门户站到底是干嘛的?别被名字骗了 1.… · 2026/9/27 2:56:55

FMQL45T900替代ZYNQ7045实战迁移指南:启动、中断、时序与工具链
FMQL45T900替代ZYNQ7045实战迁移指南:启动、中断、时序与工具链

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 2:56:49

营销型网站特点避坑指南:新手搞懂这7个注意事项
营销型网站特点避坑指南:新手搞懂这7个注意事项

营销型网站特点避坑指南:新手搞懂这7个注意事项 域名服务器搞不懂?别慌,这是建站新手最容易卡住的环节。很多江苏转行做网站的朋友,刚接手项目就被一堆技术参数劝退,其实只要抓住核心,事情没那么复杂。这里有个关键 注意事项… · 2026/9/27 2:56:49

DRM-X 6.0 Multi-DRM 接入实战:15 个开源集成项目选型对比与 Content ID 流程拆解
DRM-X 6.0 Multi-DRM 接入实战:15 个开源集成项目选型对比与 Content ID 流程拆解

摘要:给网站或在线学习平台加视频版权保护,难点往往不在加密本身,而在于怎么把「谁可以看」这件事接进已有的业务系统。本文拆解 DRM-X 6.0 开源的 15 个集成项目,按建站平台、后端语言、前端框架三档做选型对比,逐段分… · 2026/9/27 2:56:31

数字人API接口新手开发文档—— 简单易懂,新手友好版
数字人API接口新手开发文档—— 简单易懂,新手友好版

数字人API接口新手开发文档—— 简单易懂,新手友好版一、接口概述 本接口提供数字人短视频生成服务。只需准备一段真人视频和一段音频,调用接口即可让数字人"开口说话",生成口播短视频。 基本信息如下: 项目 内容 接… · 2026/9/27 2:56:25

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码