GEORADIUS (已废弃)
自 Redis 6.2.0 版本起,此命令被视为已废弃。
在迁移或编写新代码时,可以使用带 BYRADIUS
参数的 GEOSEARCH
和 GEOSEARCHSTORE
替代此命令。
GEORADIUS key longitude latitude radius <M | KM | FT | MI> [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC | DESC] [STORE key | STOREDIST key]
- 可用版本
- Redis 开源版 3.2.0
- 时间复杂度
- O(N+log(M)),其中 N 是由中心和半径界定的圆形区域边界框内的元素数量,M 是索引中的项目数量。
- ACL 类别
-
@write
,@geo
,@slow
,
返回使用 GEOADD
填充了地理空间信息的有序集合成员,这些成员位于使用中心位置和中心最大距离(半径)指定的区域边界内。
本手册页还介绍了 GEORADIUS_RO
和 GEORADIUSBYMEMBER_RO
变体(详情请参见以下部分)。
此命令的常见用例是检索距离指定点不超过给定米数(或其他单位)的地理空间项目。例如,这允许向应用程序的移动用户推荐附近的地点。
半径可以使用以下任一单位指定
- m 表示米。
- km 表示公里。
- mi 表示英里。
- ft 表示英尺。
该命令可以使用以下选项返回额外信息
WITHDIST
:同时返回返回的项目与指定中心点的距离。距离的单位与命令中半径参数指定的单位相同。WITHCOORD
:同时返回匹配项目的经度、纬度坐标。WITHHASH
:同时返回项目的原始 Geohash 编码有序集合分值,格式为 52 位无符号整数。这仅在低级技巧或调试时有用,对于普通用户而言意义不大。
命令默认返回未排序的项目。可以使用以下两个选项调用两种不同的排序方法
ASC
:按距离中心的远近,从近到远排序返回的项目。DESC
:按距离中心的远近,从远到近排序返回的项目。
默认返回所有匹配的项目。可以使用 COUNT <count>
选项将结果限制为前 N 个匹配的项目。当提供 ANY
时,命令会在找到足够多的匹配项后立即返回,因此结果可能不是距离指定点最近的那些,但另一方面,服务器投入的精力会显著降低。当未提供 ANY
时,命令将根据指定区域内匹配的项目数量进行相应的处理并对其进行排序,因此即使只返回少量结果,使用非常小的 COUNT
选项查询非常大的区域也可能会很慢。
默认情况下,命令将项目返回给客户端。可以使用以下任一选项存储结果
STORE
:将项目存储在一个使用其地理空间信息填充的有序集合中。STOREDIST
:将项目存储在一个使用其与中心距离(浮点数,单位与半径单位相同)填充的有序集合中。
只读变体
由于 GEORADIUS
和 GEORADIUSBYMEMBER
具有 STORE
和 STOREDIST
选项,在 Redis 命令表中它们在技术上被标记为写入命令。因此,只读副本会标记它们,即使连接处于只读模式,Redis 集群副本也会将它们重定向到主实例(参见 Redis 集群的 READONLY
命令)。
考虑过打破与过去的兼容性,但至少在 Redis 4.0 中被否决了,因此添加了两个只读的命令变体。它们与原始命令完全相同,但不接受 STORE
和 STOREDIST
选项。这两个变体称为 GEORADIUS_RO
和 GEORADIUSBYMEMBER_RO
,可以安全地在副本中使用。
示例
RESP2/RESP3 回复
以下之一
- 如果未指定
WITH*
选项,返回匹配成员名称的数组回复 - 如果指定了
WITHCOORD
、WITHDIST
或WITHHASH
选项,命令返回一个数组回复,其中每个子数组代表一个项目- 与中心点的距离,作为浮点数,单位与半径中指定的单位相同。
- Geohash 整数。
- 坐标,作为包含 x,y 两个项目的数组(经度,纬度)。
例如,命令 GEORADIUS Sicily 15 37 200 km WITHCOORD WITHDIST
将以下列方式返回每个项目
["Palermo","190.4424",["13.361389338970184","38.115556395496299"]]
历史
- 自 Redis 6.2.0 版本起:为
COUNT
添加了ANY
选项。 - 自 Redis 7.0.0 版本起:增加了对大写单位名称的支持。