Redis哈希是否有MGET模拟?

Kir*_*lla 37 redis

我打算开始使用哈希插入常规键.但我在Redis wiki中找不到有关multi-for hash-keys的任何信息.Redis是否支持这种命令?

谢谢.

小智 39

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

pipe = conn.pipeline()
pipe.hgetall('foo')
pipe.hgetall('bar')
pipe.hgetall('zar')
hash1, hash2, hash3 = pipe.execute()
Run Code Online (Sandbox Code Playgroud)

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

阅读更多信息,请访问http://redis.io/topics/pipelining

  • hmget 不允许您获得多个哈希值。它可以让你获得多个字段 (16认同)
  • 这是一个非常古老的答案。目前,redis有HMGET命令:https://redis.io/commands/hmget (3认同)

rjp*_*rjp 7

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

  SORT names_of_hashes GET *->field1 *->field2 *->field3 *->etc
Run Code Online (Sandbox Code Playgroud)

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

更新:如果你很好地命名哈希,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"
Run Code Online (Sandbox Code Playgroud)


Ita*_*ber 5

不,MHGETALL但是你可以赞一下:

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

return r
Run Code Online (Sandbox Code Playgroud)