首页 > 解决方案 > 如何对 redis 哈希执行地理空间操作

问题描述

我正在阅读 redis 地理空间的文档,我发现我只能存储一个key, latitude,longitudename.

我存储了一些哈希值,例如events:id,listings:id等。事件例如保存事件对象的 JSON。这是因为这些项目变化不大,我将它们缓存在 redis 中。

为了events在某​​个半径范围内找到一些,我该怎么做?

我必须做这样的事情吗?

GEOADD [event:id] {event.latitude} {event.longitude} {event.id}

然后将这些映射到events:id哈希?

标签: redis

解决方案


GEOADD key longitude latitude member将一个条目 ( memberwithlongitudelatitude) 添加到已排序的集合key中,即地理空间索引。如果排序不存在,则创建排序。

为了能够查询某个半径内的事件,您希望将所有事件都放在同一个地理空间排序集中。

这意味着您可以使用以下命令将所有内容添加到同一密钥:

GEOADD events:location {event.longitude} {event.latitude} {event.id}

您一次可以添加多个事件:

GEOADD events:location 13.361389 38.115556 "event:1" 15.087269 37.502669 "event:2"

注意经度在前

然后,您可以使用用户定义的位置附近的所有事件GEORADIUS

> GEORADIUS events:location 15 37 200 km WITHDIST
1) 1) "event:1"
   2) "190.4424"
2) 1) "event:2"
   2) "56.4413"

其他可用的命令是:

您还可以在地理空间索引上使用 sorted set 命令。例如,要获取地理空间索引上有多少事件:

> ZCARD events:location
(integer) 2

您可以将整个 JSON 编码的事件作为地理空间索引的成员,或者只是event:id将事件数据作为另一个键的键,即您的调用。


推荐阅读