51

通常のキーの内側にあるハッシュを使い始める予定です。しかし、Rediswikiでハッシュキーのマルチ取得に関する情報を見つけることができません。この種のコマンドはRedisでサポートされていますか?

ありがとうございました。

4

5 に答える 5

54

パイプライン内、つまりredisインスタンスへの1つのリクエストで、ハッシュまたは任意のキーをクエリできます。実際の実装はクライアントによって異なりますが、redis-pyを使用すると次のようになります。

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

クライアントは3つのコマンドで1つのリクエストを発行します。これは、一度に複数の値をセットに追加するために使用されるのと同じ手法です。

詳細については、http://redis.io/topics/pipeliningをご覧ください。

于 2011-02-08T00:42:25.927 に答える
11

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"
于 2010-12-03T14:14:07.597 に答える
8

いいえMHGETALL、しかしあなたはそれをLuaすることができます:

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

return r
于 2015-03-11T10:14:28.190 に答える
0

RedisにはHMGETコマンドがあり、1つのコマンドで複数のハッシュキーの値を返します。

于 2010-08-09T21:57:49.537 に答える
-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として使用すると、すべてのスコアベースのコマンドを利用できます。

于 2011-01-19T17:39:17.703 に答える