*Redis GEORADIUSBYMEMBER_RO 命令

GEORADIUSBYMEMBER_RO 以只读模式查询以指定成员为中心、给定半径范围内的地理空间元素。


*语法

GEORADIUSBYMEMBER_RO key member radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC | DESC] [STORE key] [STOREDIST key]

*参数说明

参数 类型 必填 说明
key String 有序集合键名
member String 中心点成员名称
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
> GEORADIUSBYMEMBER_RO cities beijing 1000 km
1) "beijing"

*带距离查询

> GEORADIUSBYMEMBER_RO cities beijing 1500 km WITHDIST
1) 1) "beijing"
   2) "0.0001"
2) 1) "shanghai"
   2) "1067.5984"

*常见错误

错误 原因 解决
ERR could not decode requested zset member 成员不存在 确认成员在集合中
WRONGTYPE key 不是有序集合 确认 key 类型

*最佳实践

  • 在只读节点执行查询,提高主节点性能
  • 使用 COUNT 限制结果集大小
  • 查找"附近的人"等场景非常有用
  • 配合 ASC 获取最近的结果

*FAQ

Q1: 和 GEORADIUS_RO 有什么区别? A: GEORADIUS_RO 以坐标为中心;GEORADIUSBYMEMBER_RO 以集合成员为中心。

Q2: 中心成员会被包含吗? A: 是的,中心成员(如果存在)会被包含在结果中,距离为 0。

Q3: 可以查询不存在的成员吗? A: 不可以,会返回错误。