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]
- Available since:
- 3.2.0
- Time complexity:
- O(N+log(M)) where N is the number of elements inside the bounding box of the circular area delimited by center and radius and M is the number of items inside the index.
- ACL categories:
-
@write,@geo,@slow,
返回使用GEOADD填充的地理空间信息的排序集合的成员,这些成员位于以中心位置和从中心到最大距离(半径)指定的区域边界内。
本手册页还涵盖了GEORADIUS_RO和GEORADIUSBYMEMBER_RO变体(更多信息请参见下面的部分)。
此命令的常见用例是检索距离指定点不超过给定米数(或其他单位)的地理空间项目。例如,这可以建议应用程序的移动用户附近的场所。
半径以以下单位之一指定:
- m 表示米。
- km 表示公里。
- mi 表示英里。
- ft 表示英尺。
该命令可以选择性地使用以下选项返回附加信息:
WITHDIST: 同时返回返回项与指定中心的距离。距离的单位与命令中半径参数指定的单位相同。WITHCOORD: 同时返回匹配项的经度、纬度坐标。WITHHASH: 同时返回项目的原始地理哈希编码的排序集分数,以52位无符号整数的形式。这仅对低级黑客或调试有用,对普通用户来说几乎没有兴趣。
命令默认返回未排序的项目。可以使用以下两个选项调用两种不同的排序方法:
ASC: 按从最近到最远的顺序返回项目,相对于中心。DESC: 按从最远到最近的顺序对返回的项目进行排序,相对于中心。
默认情况下,所有匹配的项目都会被返回。可以通过使用COUNT 选项将结果限制为前N个匹配项目。
当提供ANY时,命令将在找到足够匹配项后立即返回,
因此结果可能不是最接近指定点的项目,但另一方面,服务器投入的工作量显著减少。
当未提供ANY时,命令将执行与匹配指定区域的项目数量成正比的工作量并对它们进行排序,
因此,即使只返回少量结果,使用非常小的COUNT选项查询非常大的区域可能会很慢。
默认情况下,命令将项目返回给客户端。可以使用以下选项之一来存储结果:
STORE: 将项目存储在一个包含其地理空间信息的排序集合中。STOREDIST: 将项目存储在一个排序集合中,集合中的项目以其与中心的距离作为浮点数填充,距离的单位与半径中指定的单位相同。
只读变体
由于GEORADIUS和GEORADIUSBYMEMBER具有STORE和STOREDIST选项,它们在Redis命令表中被技术性地标记为写入命令。因此,只读副本会标记它们,即使连接处于只读模式,Redis Cluster副本也会将它们重定向到主实例(请参阅Redis Cluster的READONLY命令)。
考虑过打破与过去的兼容性,但至少在Redis 4.0中被拒绝了,因此添加了两个只读的命令变体。它们与原始命令完全相同,但拒绝STORE和STOREDIST选项。这两个变体称为GEORADIUS_RO和GEORADIUSBYMEMBER_RO,可以在副本中安全使用。
示例
RESP2/RESP3 回复
以下之一:
- 如果没有指定
WITH*选项,则返回匹配成员名称的数组回复 - 如果指定了
WITHCOORD、WITHDIST或WITHHASH选项,命令将返回一个数组回复,其中每个子数组代表一个单独的项目:- 从中心到该点的距离,以浮点数表示,单位与半径中指定的单位相同。
- Geohash整数。
- 坐标作为一个包含两个元素的数组(经度,纬度)。
例如,命令 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 版本开始:增加了对大写单位名称的支持。