redis-geo使用

本文介绍了Redis中的redis-geo模块,用于处理地理空间数据,包括GEOADD、GEODIST、GEORADIUS等命令的用法。通过使用Geohash技术,Redis可以在排序集中存储地理位置信息,支持半径查询,适用于社交应用中的位置查找等功能。虽然假设地球为球体,可能存在0.5%的误差,但在大多数场景下足够准确。
摘要由CSDN通过智能技术生成

GEOADD


GEOADD key longitude latitude member [longitude latitude member ...]

自3.2.0起可用。

时间复杂度:添加每个项目的 O(log(N)),其中 N 是排序集合中元素的数量。

将指定的地理空间项目(纬度,经度,名称)添加到指定的键。数据作为一个排序集存储在密钥中,以便以后可以使用带有 GEORADIUS 或 GEORADIUSBYMEMBER 命令的半径查询来检索项目。

该命令采用标准格式 x,y 的参数,因此经度必须在纬度之前指定。可以索引的坐标是有限的:非常靠近极点的区域不可索引。EPSG:900913 / EPSG:3785 / OSGEO:41001的具体限制如下:

  • 有效经度从-180到180度。
  • 有效纬度从 -85.05112878 到 85.05112878 度。

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

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

它是如何工作的?

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

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

它使用什么地球模型?

它只是假设地球是一个球体,因为使用的距离公式是 Haversine 公式。这个公式只适用于地球,这不是一个完美的球体。在需要通过 radius 和大多数其他应用程序进行查询的社交网站上下文中使用引入的错误不是问题。然而,在最糟糕的情况下,错误可能高达0.5%,因此您可能需要考虑其他系统的错误关键应用程序。

返回值

整数回复,具体为:

  • 添加到已排序集合的元素数量,不包括已更新分数的元素。

例子

redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania" (integer) 2 redis> GEODIST Sicily Palermo Catania "166274.1516" redis> GEORADIUS Sicily 15 37 100 km 1) "Catania" redis> GEORADIUS Sicily 15 37 200 km 1) "Palermo" 2) "Catania"

geodist

GEODIST key member1 member2 [unit]

自3.2.0起可用。

时间复杂度: O(log(N))

返回排序集合表示的地理空间索引中两个成员之间的距离。

给定一个表示地理空间索引的有序集合,该集合使用 GEOADD 命

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值