将 redis 用于地理空间(稳定版)
Using redis for Geospatial(on stable version)
我正在尝试在 Redis 上建立一种让所有附近用户输入经度、纬度的方法。
这意味着我需要了解我应该如何将键、值插入到 Redis 以及我应该使用哪种数据结构
另一方面,我应该如何通过给定的经度、纬度输入在 Redis 中搜索附近的用户
我知道它在 Redis 3.2 上可用。但是我们仍然使用最后的redis redis (3.0.3)
谢谢,
射线.
所以对于这个输入:key:userId value
Redis 地理数据在 Geo-Sets 中组织(由排序集支持)。将 userId 与地理数据相关联的方法非常适合 Redis Geo 支持。
出于分区原因,您可以为每个(域?/国家?)维护一个 Geo-Set。我找不到任何关于排序集大小限制的信息。 Redis 哈希可以 contain up to 2^32 - 1
字段值对,我不确定这是否适用于排序集。因此,为简单起见,您现在有一组由 key
标识的集合,其中包含一些与地理位置相关联的成员:
你 [GEOADD](http://redis.io/commands/geoadd) some-set-name long1 lat1 userId1 long2 lat2 userId2 ... longN latN userIdN
然后集合包含一些条目。
例子
GEOADD key 8.6638775 49.5282537 "Weinheim" 8.3796281 48.9978127 "Office Tower" 8.665351, 49.553302 "Train-Station"
示例命令将三个位置添加到用 key
标识的 Geo-Set。
您现在可以使用 [GEORADIUS](http://redis.io/commands/georadius) some-set-name long lat radius m|km|ft|mi
查询集合并检索 long/lat 中心半径范围内的所有成员。
例子
GEORADIUS key 8.6582861 49.5285695 1 KM
示例命令查询 1 公里半径内的所有元素,在本例中 return 结果为 Weinheim
。
您还可以通过集合成员查询 Geo-Set。意味着如果您使用集合中存在的位置,则可以将其用作参考,而不是使用 long/lat 指定地理位置(示例用例:搜索 userId X 半径内的所有用户):
[GEORADIUSBYMEMBER](http://redis.io/commands/georadiusbymember) key member radius m|km|ft|mi
例子
GEORADIUSBYMEMBER key "Train-Station" 5 KM
命令的结果return在Train-Station
周围5公里半径范围内设置成员。结果元素是:Train-Station
和 Weinheim
.
lettuce is the first Java client that has native support for all Geo-Commands. You can find here 单元测试,它演示了 API 用法。
请注意,示例命令仅显示 Geo 功能的一个子集,请在 Redis 文档中阅读更多内容。
我正在尝试在 Redis 上建立一种让所有附近用户输入经度、纬度的方法。
这意味着我需要了解我应该如何将键、值插入到 Redis 以及我应该使用哪种数据结构
另一方面,我应该如何通过给定的经度、纬度输入在 Redis 中搜索附近的用户
我知道它在 Redis 3.2 上可用。但是我们仍然使用最后的redis redis (3.0.3)
谢谢, 射线.
所以对于这个输入:key:userId value
Redis 地理数据在 Geo-Sets 中组织(由排序集支持)。将 userId 与地理数据相关联的方法非常适合 Redis Geo 支持。
出于分区原因,您可以为每个(域?/国家?)维护一个 Geo-Set。我找不到任何关于排序集大小限制的信息。 Redis 哈希可以 contain up to 2^32 - 1
字段值对,我不确定这是否适用于排序集。因此,为简单起见,您现在有一组由 key
标识的集合,其中包含一些与地理位置相关联的成员:
你 [GEOADD](http://redis.io/commands/geoadd) some-set-name long1 lat1 userId1 long2 lat2 userId2 ... longN latN userIdN
然后集合包含一些条目。
例子
GEOADD key 8.6638775 49.5282537 "Weinheim" 8.3796281 48.9978127 "Office Tower" 8.665351, 49.553302 "Train-Station"
示例命令将三个位置添加到用 key
标识的 Geo-Set。
您现在可以使用 [GEORADIUS](http://redis.io/commands/georadius) some-set-name long lat radius m|km|ft|mi
查询集合并检索 long/lat 中心半径范围内的所有成员。
例子
GEORADIUS key 8.6582861 49.5285695 1 KM
示例命令查询 1 公里半径内的所有元素,在本例中 return 结果为 Weinheim
。
您还可以通过集合成员查询 Geo-Set。意味着如果您使用集合中存在的位置,则可以将其用作参考,而不是使用 long/lat 指定地理位置(示例用例:搜索 userId X 半径内的所有用户):
[GEORADIUSBYMEMBER](http://redis.io/commands/georadiusbymember) key member radius m|km|ft|mi
例子
GEORADIUSBYMEMBER key "Train-Station" 5 KM
命令的结果return在Train-Station
周围5公里半径范围内设置成员。结果元素是:Train-Station
和 Weinheim
.
lettuce is the first Java client that has native support for all Geo-Commands. You can find here 单元测试,它演示了 API 用法。
请注意,示例命令仅显示 Geo 功能的一个子集,请在 Redis 文档中阅读更多内容。