我将 Redis 与 php 及其库phpredis 一起使用。
我有以下结构:
city:1 {
lat->14.02,
lon->10.00,
hash->sp2f1h60w5j
}
city:2 {
lat->14.03,
lon->10.1,
hash->sp2f1h60w5m
}
但我还没有找到一种通过哈希搜索的方法。我想搜索例如完全相同的哈希或大致相同的哈希。我应该改变我的结构吗?
谢谢。
我将 Redis 与 php 及其库phpredis 一起使用。
我有以下结构:
city:1 {
lat->14.02,
lon->10.00,
hash->sp2f1h60w5j
}
city:2 {
lat->14.03,
lon->10.1,
hash->sp2f1h60w5m
}
但我还没有找到一种通过哈希搜索的方法。我想搜索例如完全相同的哈希或大致相同的哈希。我应该改变我的结构吗?
谢谢。
您可以按照此线程中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
为什么不使用redis中的key来获取元素。
喜欢:
城市-sp2f1h60w5j = 1
城市-sp2f1h60w5m = 2
然后,如果您希望壁橱:通过“钥匙”获得:city-sp2f1h60w* 如果将返回钥匙的“数组”......或城市ID。不记得确切的返回数据。
干杯
您想查找特定点附近的所有项目吗?由于您正在寻找完全匹配或近似匹配,我认为是这种情况。Redis 昨天刚刚发布了全新的地理功能 ( http://redis.io/commands#geo )。
GeoRadius 和 GeoRadiusByMember 是您正在寻找的。