复述,最佳实践

地理空间

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

向地理空间索引添加项很容易。例如,假设您正在跟踪一组沿着道路行驶的汽车——我们将此组汽车简称为“cars”。我们会说您的特定汽车可以被识别为成员“my-car”(我们使用这个术语)成员因为地理索引只是集合的一种形式)。要将car添加到set中,可以运行以下命令:

>GEOADD我的车

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

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

> GEOADD cars -115.17172 36.12196 my-car

让我们在“cars”集合中添加第二辆车——这次它是由Robin驾驶的:

> GEOADD cars -115.171971 36.120609 robins-car

看坐标,你可以看出这两辆车很接近,但有多接近呢?可以通过运行GEODIST命令来确定。

>GEODIST我的车汽车robins-car“90.7082”

这意味着两辆车相距大约90米。也可以指定其他单位:

> GEODIST汽车my-car robins-car ft“297.5990”

这拉了同样的距离,单位是英尺。你也可以用英里(mi)或公里(km)。

现在,让我们看看从某一点开始的半径内有哪些元素:

>GEORADIUS汽车-115.17258 36.11996 100米1)“我的车”2)“robins-car”

这就返回了给定点100米的所有元素。你也可以返回集合中其他成员半径内的成员:

>GEORADIUSBYMEMBER汽车知更鸟车100米1)“robins-car”2)“我的车”

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

> GEORADIUSBYMEMBER cars robins-car 100米WITHDIST1) 1)“robins-car”2)“0.0000”2) 1)“我的车”2)“90.7082”

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

> GEORADIUSBYMEMBER cars robins-car 100米WITHDIST WITHCOORD1) 1)“robins-car”2)“0.0000”3) 1)“-115.17197102308273315”2)“36.12060917648089031”2) 1)“我的车”2)“90.7082”3) 1)“-115.17258256673812866”2)“36.11996028786411017”

由于地理空间索引只是操作Sorted set的另一种方法,因此可以通过使用Sorted set命令来实现一些操作。如果我们想从" cars "集合中移除" my-car ",我们需要使用排序集合命令ZREM:

>ZREM我的车车

Redis提供了一套丰富的地理空间操作工具,在这个模式中只涵盖了基本的内容。您可以在redis.io上阅读有关完整命令集的更多信息。

Baidu