GEORADIUS (已弃用)
从 Redis 版本 6.2.0 开始,此命令被视为已弃用。
在迁移或编写新代码时,可以使用 GEOSEARCH
和 GEOSEARCHSTORE
以及 BYRADIUS
参数来替换它。
GEORADIUS key longitude latitude radius <m | km | ft | mi> [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC | DESC] [STORE key | STOREDIST key]
- 可用版本
- 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
:还返回项目的原始地理哈希编码的排序集分数,以 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 开始:添加了对大写单位名称的支持。