dot Redis 8 来了——它是开源的

了解更多

地理空间索引

返回词汇表

地理空间索引定义

地理空间索引是一种在数据库中使用的技术,用于根据其地理位置高效地存储和检索数据。它涉及使用专门的数据结构对数据库中的空间数据进行索引,该数据结构可以快速识别哪些对象或数据点位于特定的地理区域内。

地理空间索引在处理大量地理数据的应用中特别有用,例如地图应用、地理定位服务和空间分析。通过使用地理空间索引,这些应用可以根据数据的位置快速查询和分析数据,而无需扫描大量数据来查找相关信息。

Redis 地理空间最佳实践

Redis 有几个与地理空间索引(GEO 命令)相关的命令,但与其他命令不同,这些命令没有自己的数据类型。这些命令实际上是依赖于有序集合数据类型。这是通过使用 geohash 算法将纬度和经度编码到有序集合的分数中来实现的。

向地理空间索引添加项目很容易。举个例子,假设您正在跟踪一组在路上行驶的汽车——我们将这组汽车简单地称为“cars”。我们将您的特定汽车标识为成员“my-car”(我们使用“ 成员 ”一词,因为地理索引只是一种集合形式)。要将汽车添加到集合中,我们可以运行命令

> GEOADD cars -115.17087 36.12306 my-car 

第一个参数是我们添加到的集合,第二个是经度,第三个是纬度,第四个是成员名称。

要更新汽车的位置,您只需使用新坐标再次运行该命令即可。这样做是因为地理索引只是一个集合——不允许重复的项目。

> GEOADD cars -115.17172 36.12196 my-car

让我们向“cars”集合添加第二辆汽车——这次是由 Robin 驾驶的

> GEOADD cars -115.171971 36.120609 robins-car

查看坐标,您会发现这两辆汽车相当近,但有多近呢?您可以通过运行 GEODIST 命令来确定这一点。

> GEODIST cars my-car robins-car
"90.7082"

这意味着这两辆车的距离约为 90 米。您还可以指定其他单位

> GEODIST cars my-car robins-car ft
"297.5990"

这给出了以英尺为单位的相同距离。您还可以使用英里 (mi) 或千米 (km)。

现在,让我们看看从某个点出发半径范围内的项目

> GEORADIUS cars -115.17258 36.11996 100 m
1) "my-car"
2) "robins-car"

这将返回给定点 100 米半径内的所有成员。您还可以返回集合中另一个成员半径范围内的成员

> GEORADIUSBYMEMBER cars robins-car 100 m
1) "robins-car"
2) "my-car"

我们还可以通过添加可选参数 WITHDIST 来包含距离——这适用于 GEORADIUS 或 GEORADIUSBYMEMBER

> GEORADIUSBYMEMBER cars robins-car 100 m WITHDIST
1) 1) "robins-car"
   2) "0.0000"
2) 1) "my-car"
   2) "90.7082"

GEORADIUS 和 GEORADIUSBYMEMBER 的另一个可选参数是 WITHCOORD,它返回每个成员的坐标。WITHDIST 和 WITHCOORD 可以一起使用或单独使用

> GEORADIUSBYMEMBER cars robins-car 100 m WITHDIST WITHCOORD
1) 1) "robins-car"
   2) "0.0000"
   3) 1) "-115.17197102308273315"
      2) "36.12060917648089031"
2) 1) "my-car"
   2) "90.7082"
   3) 1) "-115.17258256673812866"
      2) "36.11996028786411017"

由于地理空间索引只是操作有序集合的一种替代方式,因此只需使用有序集合命令即可实现一些操作。如果我们要从“cars”集合中删除“my-car”,我们需要使用有序集合命令 ZREM

> ZREM cars my-car

Redis 提供了一套丰富的地理空间操作工具,本模式只介绍了基础知识。您可以在 redis.io 上阅读有关完整命令集的更多信息。