直接用georadius命令即可查“附近的人”,无需自算距离或写sql;核心是用geoadd存用户/地点经纬度(经度在前、纬度在后,范围分别为-180~180和-85.05112878~85.05112878),再用georadius以坐标为中心拉半径内成员,支持withdist、withcoord、asc/desc、count等参数;georadiusbymember则可直接以某member为中心查询周边;geodist和geopos用于距离计算与坐标验证。

直接用 GEORADIUS 命令就能查“附近的人”,不需要自己算距离、也不用写复杂 SQL。核心是把用户和地点都存成地理坐标,再以某一点为中心拉半径范围。
存位置:用 GEOADD 批量录入经纬度
每个用户或商户对应一个唯一名称(member),配合经度、纬度存入同一个 key:
- 经度在前、纬度在后,顺序不能反(比如北京:116.40439 39.90901)
- 经度范围必须是 -180 ~ 180,纬度必须是 -85.05112878 ~ 85.05112878,超限会报错
- 支持一次添加多个,减少网络往返;加 NX 可避免重复覆盖,加 CH 能看到更新了多少条
示例:
GEOADD users 116.40439 39.90901 "user:1001" 116.40752 39.90892 "user:1002"
查附近:GEORADIUS 按坐标拉人
给定中心点(比如当前用户的经纬度)和半径,直接返回范围内所有 member:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 单位可选 m(默认)、km、mi、ft;加 WITHDIST 返回距离,加 WITHCOORD 返回坐标,加 ASC 或 DESC 控制排序
- 用 COUNT 限制返回数量,避免大范围拉取拖慢响应
- 不推荐无限制查全量,尤其 radius 设太大时(比如 100km),建议搭配分页或前端限距
示例:
GEORADIUS users 116.405 39.909 3 km WITHDIST WITHCOORD ASC COUNT 20
查同区域:GEORADIUSBYMEMBER 按人找人
如果已知某个用户 ID,想查“和他 2 公里内还有谁”,不用再传经纬度,直接用名字当中心点:
- 命令自动查出该 member 对应的坐标,再做半径检索
- 适合社交类场景:“显示你好友附近的人”或“查看某主播附近的观众”
- 同样支持 WITHDIST、COUNT 等参数,逻辑和 GEORADIUS 一致
示例:
GEORADIUSBYMEMBER users "user:1001" 2 km WITHDIST COUNT 10
验坐标 & 算距离:GEODIST 和 GEOPOS 辅助验证
调试或业务校验时常用:
- GEOPOS users "user:1001" 查某人的精确经纬度,确认录入无误
- GEODIST users "user:1001" "user:1002" km 直接算两人直线距离,单位可选
- 注意:GEODIST 使用球面公式(haversine),误差小于 0.5%,够用但不是导航级精度










