通常のキーの内側にあるハッシュを使い始める予定です。しかし、Rediswikiでハッシュキーのマルチ取得に関する情報を見つけることができません。この種のコマンドはRedisでサポートされていますか?
ありがとうございました。
通常のキーの内側にあるハッシュを使い始める予定です。しかし、Rediswikiでハッシュキーのマルチ取得に関する情報を見つけることができません。この種のコマンドはRedisでサポートされていますか?
ありがとうございました。
パイプライン内、つまりredisインスタンスへの1つのリクエストで、ハッシュまたは任意のキーをクエリできます。実際の実装はクライアントによって異なりますが、redis-pyを使用すると次のようになります。
pipe = conn.pipeline()
pipe.hgetall('foo')
pipe.hgetall('bar')
pipe.hgetall('zar')
hash1, hash2, hash3 = pipe.execute()
クライアントは3つのコマンドで1つのリクエストを発行します。これは、一度に複数の値をセットに追加するために使用されるのと同じ手法です。
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"
いいえMHGETALL
、しかしあなたはそれをLuaすることができます:
local r = {}
for _, v in pairs(KEYS) do
r[#r+1] = redis.call('HGETALL', v)
end
return r
RedisにはHMGETコマンドがあり、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として使用すると、すべてのスコアベースのコマンドを利用できます。