Redis如何查询附近的人_利用GEORADIUS指令进行Geo范围搜索

张开发
2026/4/12 19:19:37 15 分钟阅读

分享文章

Redis如何查询附近的人_利用GEORADIUS指令进行Geo范围搜索
GEORADIUS 返回空结果通常因坐标顺序错误必须经度在前、纬度在后默认不排序需加ASC/DESC单位必须显式指定同一member重复GEOADD会覆盖旧坐标。GEORADIUS 返回空结果先检查坐标存入格式是否正确Redis 的 GEORADIUS 不会报错但返回空数组时八成是数据没存对——它只接受「经度在前、纬度在后」的顺序和常见地图 API如高德、百度的「纬度在前、经度在后」相反。用 GEOADD 存位置时必须写成 GEOADD users 116.48 39.92 uid:1001经度 116.48纬度 39.92如果误写为 GEOADD users 39.92 116.48 uid:1001坐标就飞到南极附近GEORADIUS 自然查不到可用 GEOPOS 验证执行 GEOPOS users uid:1001看返回的经纬度是否落在合理地理范围内GEORADIUS 查询结果乱序默认不按距离排序默认情况下GEORADIUS 返回的是无序集合不是按“由近到远”排好的。你看到的顺序取决于 Redis 内部哈希桶遍历逻辑不能依赖。加 ASC 参数才能升序最近的在前GEORADIUS users 116.48 39.92 5 km ASC加 DESC 才降序最远的在前不带 ASC/DESC 时即使加了 WITHDIST距离字段也和元素一一对应但元素本身不排序如果业务需要分页比如“加载下一页”别用 count 偏移而应结合 STORE 或 STOREDIST 缓存结果再切片否则多次查询可能因并发写入导致结果漂移查不到 500 米内的人注意单位和精度限制GEORADIUS 的距离单位只有 m米、km、mi英里、ft英尺四种没有 cm 或 nm而且 Redis Geo 使用的是 Geohash5 位精度约 2.4km7 位才到约 19m——它天生不适合亚米级场景。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手依托大模型帮助用户记录、整理和分析音视频内容体验用大模型做音视频笔记、整理会议记录。

更多文章