*Redis GEORADIUS_RO 命令

GEORADIUS_RO 以只读模式查询指定坐标范围内的地理空间元素,与 GEORADIUS 功能相同但不会执行任何写操作。


*语法

GEORADIUS_RO key longitude latitude radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC | DESC] [STORE key] [STOREDIST key]

*参数说明

参数 类型 必填 说明
key String 有序集合键名
longitude Double 中心点经度
latitude Double 中心点纬度
radius Double 搜索半径
unit String 单位:mkmftmi
WITHCOORD Flag 返回成员坐标
WITHDIST Flag 返回距离
WITHHASH Flag 返回原始 geohash
COUNT Integer 限制返回数量
ASC / DESC Flag 按距离升序/降序
STORE String 存储结果到指定 key(仅主节点)
STOREDIST String 存储距离到指定 key(仅主节点)

*返回值

  • Array:成员列表,可选包含坐标、距离、geohash

*时间复杂度

O(N+log(M)),N 为范围内元素数量,M 为集合总元素数


*示例

*基本查询

> GEOADD cities 116.4074 39.9042 "beijing" 121.4737 31.2304 "shanghai"
(integer) 2
> GEORADIUS_RO cities 116.4074 39.9042 1000 km
1) "beijing"

*带距离和坐标

> GEORADIUS_RO cities 116.4074 39.9042 1500 km WITHDIST WITHCOORD
1) 1) "beijing"
   2) "0.0001"
   3) 1) "116.407396495342"
      2) "39.9042000174522"
2) 1) "shanghai"
   2) "1067.5984"
   3) 1) "121.473696947098"
      2) "31.2304162988836"

*常见错误

错误 原因 解决
WRONGTYPE key 不是有序集合 确认 key 类型
ERR radius cannot be negative 半径为负数 使用正数半径

*最佳实践

  • 在只读节点或副本上执行查询
  • 使用 COUNT 限制返回数量,避免大数据集
  • 使用 WITHDIST 获取精确距离,用于排序展示
  • 配合 ASC 获取最近的元素

*FAQ

Q1: GEORADIUS_RO 和 GEORADIUS 有什么区别? A: 功能相同,但 _RO 版本在只读节点安全执行,不执行写操作。

Q2: 可以跨数据库查询吗? A: 不能,key 必须在当前数据库中。

Q3: 距离精度如何? A: 使用 Haversine 公式,精度约 0.5%。