首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redis散列有MGET模拟吗?

Redis散列有MGET模拟吗?
EN

Stack Overflow用户
提问于 2010-07-25 21:50:20
回答 5查看 28.7K关注 0票数 49

我计划开始在普通键中使用散列。但是我在Redis wiki上找不到任何关于多个get for hash-key的信息。Redis支持这种命令吗?

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-02-08 08:42:26

您可以在管道中查询哈希或任何键,即在一个请求中查询您的redis实例。实际的实现取决于您的客户端,但是使用redis-py,它将如下所示:

代码语言:javascript
复制
pipe = conn.pipeline()
pipe.hgetall('foo')
pipe.hgetall('bar')
pipe.hgetall('zar')
hash1, hash2, hash3 = pipe.execute()

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

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

票数 53
EN

Stack Overflow用户

发布于 2010-12-03 22:14:08

如果SORT允许您在->语法中使用多个get,并且您的所有散列都具有相同的字段,那么您可以通过将它们的名称放入一个集合中并对其进行排序来在批量回复中获取它们。

代码语言:javascript
复制
  SORT names_of_hashes GET *->field1 *->field2 *->field3 *->etc

但看起来您不能使用散列访问来做到这一点。此外,您还必须自己将返回列表转换为散列。

更新: Redis似乎允许你获取多个字段,如果你给你的哈希值命名得当的话:

代码语言:javascript
复制
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"
票数 10
EN

Stack Overflow用户

发布于 2015-03-11 18:14:28

没有MHGETALL,但是你可以Lua它:

代码语言:javascript
复制
local r = {}
for _, v in pairs(KEYS) do
  r[#r+1] = redis.call('HGETALL', v)
end

return r
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3329408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档