时间:2010-07-25 13:50:20

标签: redis

5 个答案:

答案 0 :(得分:37)

您可以查询管道中的哈希值或任何键,即在一个请求中查询redis实例。实际实现取决于您的客户端,但使用redis-py它看起来像这样:

pipe = conn.pipeline()
pipe.hgetall('foo')
pipe.hgetall('bar')
pipe.hgetall('zar')
hash1, hash2, hash3 = pipe.execute()

客户端将发出一个包含3个命令的请求。这与用于一次向集合添加多个值的技术相同。

http://redis.io/topics/pipelining

了解详情

答案 1 :(得分:6)

如果使用SORT,您可以使用 - >使用多个GET语法,并且所有哈希都具有相同的字段,您可以通过将其名称放入集合并对其进行排序来批量回复。

  SORT names_of_hashes GET *->field1 *->field2 *->field3 *->etc

但看起来你不能用哈希访问来做到这一点。另外,你必须自己将返回列表变回哈希值。

更新:如果你很好地命名哈希,Redis似乎可以让你获取多个字段:

redis> hset hash:1 name fish
(integer) 1
redis> hset hash:2 name donkey
(integer) 1
redis> hset hash:3 name horse
(integer) 1
redis> hset hash:1 type fish
(integer) 1
redis> hset hash:2 type mammal
(integer) 1
redis> hset hash:3 type mammal
(integer) 1
redis> sadd animals 1
(integer) 1
redis> sadd animals 2
(integer) 1
redis> sadd animals 3
(integer) 1
redis> sort animals get # get hash:*->name get hash:*->type
1. "1"
2. "fish"
3. "fish"
4. "2"
5. "donkey"
6. "mammal"
7. "3"
8. "horse"
9. "mammal"

答案 2 :(得分:5)

MHGETALL但你可以Lua it:

local r = {}
for _, v in pairs(KEYS) do
  r[#r+1] = redis.call('HGETALL', v)
end

return r

答案 3 :(得分:0)

Redis有一个HMGET命令,它使用一个命令返回几个哈希键的值。

答案 4 :(得分:-1)

没有命令一次性完成它,但是有一种方法可以“很好地”使用列表(或排序集)来存储你的hashKeys,然后使用multi来批量检索它们。

在PHP中:

$redis->zAdd("myHashzSet", 1, "myHashKey:1");
$redis->zAdd("myHashzSet", 2, "myHashKey:2");
$redis->zAdd("myHashzSet", 3, "myHashKey:3");

$members = $redis->zRange("myHashzSet", 0, -1);
$redis->multi();
foreach($members as $hashKey) {
    $redis->hGetAll($hashKey);
}
$results = $redis->exec();

我建议使用一个排序集,在那里你使用得分作为哈希的ID,它允许利用所有基于得分的命令。