地理添加

语法
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以删除元素。Geo 索引结构只是一个排序集。

GEOADD 选项

GEOADD还提供以下选项:

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

注: XXNX 选项是互斥的。

它是如何工作的?

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

这种格式允许通过检查覆盖整个形状所需的 1+8 区域并丢弃其外部的元素来查询边界框和半径。通过计算所覆盖的框的范围,从排序集分数的不太重要的部分中删除足够的位,并计算每个区域的排序集中要查询的分数范围来检查区域。

它使用什么地球模型?

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

例子

GEOADD 西西里岛 13.361389 38.115556 “巴勒莫” 15.087269 37.502669 “卡塔尼亚” GEODIST 西西里岛 Palermo Catania GEORADIUS 西西里岛 15 37 100 公里 GEORADIUS 西西里岛 15 37 200 公里

RESP2/RESP3 回复

Integer reply:当使用时不带可选参数,则为添加到排序集的元素数(不包括分数更新)。如果指定了 CH 选项,则为已更改(添加或更新)的元素数。

历史

  • 从 Redis 版本 6.2.0 开始:添加了CH,NXXX选项。
为本页评分
返回顶部 ↑