GEORADIUS 已弃用

用法
GEORADIUS key longitude latitude radius 〈 m | km | ft | mi 〉 [ WITHCOORD ] [ WITHDIST ] [ WITHHASH ] [ COUNT count [ ANY ] ] [ ASC | DESC ] [ STORE storekey | STOREDIST storedistkey ]
复杂度
O(N+log(M)),其中 N 是由中心和半径限定的圆形区域的边界框内的元素数量,M 是索引中的项目数量。
始于
3.2.0
ACL 分类
@geo, @write, @slow

返回一个用 GEOADD 填充的有序集合的成员,这些成员位于由中心位置和距中心的最大距离(半径)指定的区域边界内。

此手册页还涵盖了 GEORADIUS_ROGEORADIUSBYMEMBER_RO 变体(有关更多信息,请参阅以下部分)。

此命令的常见用例是检索距指定点不超过给定米数(或其他单位)的地理空间项目。例如,这允许为应用程序的移动用户推荐附近地点。

半径以下列单位之一指定:

  • m 表示米。
  • km 表示千米。
  • mi 表示英里。
  • ft 表示英尺。

该命令可选地使用以下选项返回额外信息:

  • WITHDIST:同时返回返回项目与指定中心的距离。距离以与命令半径参数指定的单位相同的单位返回。
  • WITHCOORD:同时返回匹配项的经度、纬度坐标。
  • WITHHASH:同时返回项目的原始 Geohash 编码的有序集合分数,形式为 52 位无符号整数。这仅对底层技巧或调试有用,对普通用户意义不大。

命令默认返回未排序的项目。可以使用以下两个选项调用两种不同的排序方法:

  • ASC:将返回的项目从最近到最远排序,相对于中心。
  • DESC:将返回的项目从最远到最近排序,相对于中心。

默认情况下,所有匹配项都会返回。可以使用 COUNT <count> 选项将结果限制为前 N 个匹配项。当提供 ANY 时,命令会在找到足够匹配项时立即返回,因此结果可能不是最接近指定点的,但另一方面,服务器投入的精力会显著降低。当未提供 ANY 时,命令会执行与匹配指定区域的项目数量成比例的操作并对其进行排序,因此即使只返回少量结果,使用非常小的 COUNT 选项查询非常大的区域也可能很慢。

默认情况下,命令将项目返回给客户端。可以使用以下选项之一存储结果:

  • STORE:将项目存储在一个填充了其地理空间信息的有序集合中。
  • STOREDIST:将项目存储在一个填充了其与中心距离(浮点数)的有序集合中,单位与半径中指定的单位相同。

只读变体

由于 GEORADIUSGEORADIUSBYMEMBER 具有 STORESTOREDIST 选项,因此它们在 Valkey 命令表中在技术上被标记为写入命令。因此,只读副本会标记它们,Valkey 集群副本会将它们重定向到主实例,即使连接处于只读模式(请参阅 Valkey 集群的 READONLY 命令)。

添加了两个命令的只读变体。它们与原始命令完全相同,但拒绝 STORESTOREDIST 选项。这两个变体称为 GEORADIUS_ROGEORADIUSBYMEMBER_RO,可以安全地用于副本。

示例

127.0.0.1:6379> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
127.0.0.1:6379> GEORADIUS Sicily 15 37 200 km WITHDIST
1) 1) "Palermo"
   2) "190.4424"
2) 1) "Catania"
   2) "56.4413"
127.0.0.1:6379> GEORADIUS Sicily 15 37 200 km WITHCOORD
1) 1) "Palermo"
   2) 1) "13.36138933897018433"
      2) "38.11555639549629859"
2) 1) "Catania"
   2) 1) "15.08726745843887329"
      2) "37.50266842333162032"
127.0.0.1:6379> GEORADIUS Sicily 15 37 200 km WITHDIST WITHCOORD
1) 1) "Palermo"
   2) "190.4424"
   3) 1) "13.36138933897018433"
      2) "38.11555639549629859"
2) 1) "Catania"
   2) "56.4413"
   3) 1) "15.08726745843887329"
      2) "37.50266842333162032"

RESP2/RESP3 回复

以下之一:

  • 如果未指定任何 WITH* 选项,则返回匹配成员名称的数组回复

  • 如果指定了 WITHCOORDWITHDISTWITHHASH 选项,则命令返回一个数组的数组回复,其中每个子数组代表一个单独的项目

    1. 与中心的距离,以浮点数表示,单位与半径中指定的单位相同。

    2. Geohash 整数。

    3. 坐标以包含两个项目 x,y 的数组形式表示(经度,纬度)。

例如,命令 GEORADIUS Sicily 15 37 200 km WITHCOORD WITHDIST 将以以下方式返回每个项目:

["Palermo","190.4424",["13.361389338970184","38.115556395496299"]]

历史

版本 更改
6.2.0

COUNT 添加了 ANY 选项。

7.0.0

添加了对大写单位名称的支持。