2

我将 Redis 与 php 及其库phpredis 一起使用。

我有以下结构:

city:1 {
 lat->14.02,
 lon->10.00,
 hash->sp2f1h60w5j
}

city:2 {
 lat->14.03,
 lon->10.1,
 hash->sp2f1h60w5m
}

但我还没有找到一种通过哈希搜索的方法。我想搜索例如完全相同的哈希或大致相同的哈希。我应该改变我的结构吗?

谢谢。

4

3 回答 3

4

您可以按照此线程中Josiah Carlson 的建议,将散列转换为数字,并将其用作排序集中的分数。像这样的东西:

city:1 {
 lat->14.02,
 lon->10.00,
 hash->sp2f1h60w5j
}

city:2 {
 lat->14.03,
 lon->10.1,
 hash->sp2f1h60w5m
}

要将 geohash 用作数字,您需要使用特定的字符映射从 base 32 解码它们 - 请参阅Wikipedia 上的 Geohash。我将在下面使用示例数字。

cities { (1, 4711), (2, 4712) }

现在您可以使用zrangebyscore来查找某个地区的城市:

zrangebyscore cities 4000 5000
于 2012-08-14T16:00:53.237 回答
1

为什么不使用redis中的key来获取元素。

喜欢:

城市-sp2f1h60w5j = 1

城市-sp2f1h60w5m = 2

然后,如果您希望壁橱:通过“钥匙”获得:city-sp2f1h60w* 如果将返回钥匙的“数组”......或城市ID。不记得确切的返回数据。

干杯

于 2014-11-26T16:30:37.690 回答
0

您想查找特定点附近的所有项目吗?由于您正在寻找完全匹配或近似匹配,我认为是这种情况。Redis 昨天刚刚发布了全新的地理功能 ( http://redis.io/commands#geo )。

GeoRadius 和 GeoRadiusByMember 是您正在寻找的。

于 2016-05-08T11:22:27.453 回答