我正在使用带有php的Redis及其库 phpredis 。
我有以下结构:
city:1 {
lat->14.02,
lon->10.00,
hash->sp2f1h60w5j
}
city:2 {
lat->14.03,
lon->10.1,
hash->sp2f1h60w5m
}
但我还没有找到一种通过哈希搜索的方法。我想搜索完全相同的哈希或大致相同的哈希值。 我应该改变我的结构吗?
感谢。
答案 0 :(得分:4)
您可以按照Josiah Carlson的建议from this thread,将哈希转换为数字,并将其用作排序集中的分数。像这样:
city:1 {
lat->14.02,
lon->10.00,
hash->sp2f1h60w5j
}
city:2 {
lat->14.03,
lon->10.1,
hash->sp2f1h60w5m
}
要将地理数据用作数字,您需要使用特定字符映射从基数32解码它们 - 请参阅Geohash on Wikipedia。我将使用下面的示例数字。
cities { (1, 4711), (2, 4712) }
现在,您可以使用zrangebyscore查找某个地区的城市:
zrangebyscore cities 4000 5000
答案 1 :(得分:1)
为什么不使用redis中的密钥来获取元素。
像:
city-sp2f1h60w5j = 1
city-sp2f1h60w5m = 2
那么如果你想要壁橱: 得到“钥匙”: 城市sp2f1h60w * 如果将返回键的“数组”...或城市ID。不记得确切的返回数据。
欢呼声
答案 2 :(得分:0)
您想找到特定点附近的所有物品吗?由于您正在寻找精确匹配或接近匹配,我认为情况就是如此。 Redis昨天刚刚发布了全新的Geo功能(http://redis.io/commands#geo)。
GeoRadius和GeoRadiusByMember是您正在寻找的。 p>