GEOADD

语法
GEOADD key [NX | XX] [CH] longitude latitude member [longitude
  latitude member ...]
可用时间
3.2.0
时间复杂度
每个添加的元素为 O(log(N)),其中 N 是排序集中元素的数量。
ACL 类别
@write, @geo, @slow,

将指定的地理空间项(经度、纬度、名称)添加到指定的键中。数据以排序集的形式存储在键中,可以与 GEOSEARCH 命令一起查询项目。

该命令以标准格式 x,y 接受参数,因此经度必须在纬度之前指定。可以索引的坐标有上限:非常靠近两极的区域无法索引。

EPSG:900913 / EPSG:3785 / OSGEO:41001 指定的确切限制如下

  • 有效的经度范围为 -180 到 180 度。
  • 有效的纬度范围为 -85.05112878 到 85.05112878 度。

当用户尝试索引指定范围之外的坐标时,命令将报告错误。

注意:没有 GEODEL 命令,因为可以使用 ZREM 来删除元素。地理索引结构只是一个排序集。

GEOADD 选项

GEOADD 还提供了以下选项

  • XX: 仅更新已存在的元素。从不添加元素。
  • NX: 不要更新已存在的元素。始终添加新元素。
  • CH: 将返回值从添加的新元素数量修改为更改的元素总数(CH 是 changed 的缩写)。更改的元素是 添加的新元素坐标已更新的已存在元素。因此,命令行中指定的具有与过去相同分数的元素不会被计算在内。注意:通常,GEOADD 的返回值只计算添加的新元素数量。

注意:XXNX 选项是互斥的。

它是如何工作的?

排序集的填充方式是使用一种称为 Geohash 的技术。经度和纬度位被交织在一起形成一个唯一的 52 位整数。我们知道,排序集双精度分数可以表示一个 52 位整数,而不会丢失精度。

此格式允许通过检查覆盖整个形状所需的 1+8 个区域并丢弃外部元素来进行边界框和半径查询。通过计算覆盖框的范围,从排序集分数的较低有效位部分删除足够的位,并计算每个区域在排序集中查询的范围来检查区域。

它使用什么地球模型?

该模型假设地球是一个球体,因为它使用海弗森公式来计算距离。该公式在应用于地球(不是完美的球体)时只是一个近似值。例如,社交网络和类似应用程序在使用此类查询时,引入的误差不是问题。但是,在最坏的情况下,误差可能高达 0.5%,因此对于错误敏感的应用程序,您可能需要考虑其他系统。

示例

GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania" GEODIST Sicily Palermo Catania GEORADIUS Sicily 15 37 100 km GEORADIUS Sicily 15 37 200 km

RESP2/RESP3 答复

整数答复: 不使用可选参数时,添加到排序集的元素数量(不包括分数更新)。如果指定了 CH 选项,则更改(添加或更新)的元素数量。

历史

  • 从 Redis 版本 6.2.0 开始:添加了 CHNXXX 选项。
RATE THIS PAGE
Back to top ↑