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));

相关新闻

最新新闻

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 本文以 getopt(3) 手册 为核心&a…

2026/9/23 4:54:42
轻量服务器还是ECS?大促云服务器选购与避坑实战指南

轻量服务器还是ECS?大促云服务器选购与避坑实战指南

每年大促节点,群里永远有人在问同一个问题:“38元的轻量服务器到底怎么抢?为什么我每次点进去都是已售罄?68元直购和99元的ECS我到底选哪个?”作为一个常年帮团队和自己采购云服务器的老用户,我太清楚这种纠…

2026/9/23 8:01:55
为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目地址:…

2026/9/23 8:02:11
PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between i…

2026/9/23 8:01:38
Spring源码解析:构造器注入的类型转换与候选匹配机制

Spring源码解析:构造器注入的类型转换与候选匹配机制

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

2026/9/23 8:01:21
openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

2026/9/23 8:02:28

日新闻

周新闻