【问题标题】:REDIS : See everything that is under the "field"REDIS:查看“字段”下的所有内容
【发布时间】:2014-01-23 17:10:41
【问题描述】:

解释起来很复杂。

我想要的是有一个命令,该命令将字段作为参数并显示该字段中的所有键和值。

我翻遍了 REDIS 文档,发现了 HGETALL 和 HMGET,但这两个命令不符合我的需要。

HGETALL 在参数中询问键并显示所有字段及其值。 此处示例:http://redis.io/commands/hgetall

HMGET 接受附加到它的键和字段的参数并显示它们的值。此处示例:http://redis.io/commands/hmget

也有 HKEYS,但没有提供我想要的。

如果没有非常精确的命令,我想知道我如何编写代码,以便提供接近我想要制作的东西,如果可能的话。

提前感谢您的回答。

【问题讨论】:

  • 您是否尝试从许多哈希中获取特定字段?
  • 是的,我试图获取特定字段上的所有数据(键和值)。所以从许多哈希中。

标签: hash redis


【解决方案1】:

如果我理解得很好,你有几个哈希,每个都有自己的密钥。然后你在这些散列中有一个字段,例如字段“名称”。现在你想问类似“告诉我我在哪些键中存储了 name 属性以及值是什么”

如果是这种情况,在 redis 中有一些选项可以做到这一点,但这不是存储信息的最佳方式。

执行此操作的一种可能方法是对您将存储字段名称的所有键使用通用模式。例如 "record:a", "record:b"... 然后你可以发出一个像 KEYS record: 这样的 KEYS 命令,你会得到你的散列的所有键。 (注意SCAN效率更高)

接下来您需要发出几个命令,例如 hget key、name。您可以使用 MULTI,以便同时执行所有命令。

通过该过程,您将在第一步中获得所有键,在第二步中获得所有值。但我认为这不是最佳选择。

如果我知道您的用例,也许我可以提供更多帮助

【讨论】:

  • 是的,这就是我写的原因(注意 SCAN 更有效)。当然,前提是您使用的是 redis 2.8 或更高版本。
  • SCAN 效率并不高,但它是增量的:它不会长时间阻塞 Redis 实例。无论如何,我一般会排除任何基于扫描键的解决方案。如果 OP 需要快速访问字段中的数据,则需要显式索引。
  • 是的,我所说的“更高效”的意思是,无论您的键空间有多大,每次运行它时总能获得可预测的时间,因此您不会减慢实例的速度。我也同意这不是最佳选择,正如我在回答中所说的那样。一旦我们了解了用例,我们可能可以更好地帮助用户了解如何拥有二级索引。
  • 我想我会在 8 小时内回复。在评论中,我无法解释。
【解决方案2】:

我认为你是明白的,但我不是英语,即使我在网站上翻译(谷歌翻译)我也不完全理解你的答案。对不起。

我尝试过使用 KEYS。我有我的哈希使用的字段列表。我有一个想法,就是做bla=KEYS *,做一个blas.each do |bla|,然后在每个...做,做@bla=hget(...,'bla')。或者类似的东西。但这不可能,我没有钥匙。

事实上,我正在尝试在 Ruby on Rails 脚手架中用 Redis 替换 sqlite3。它在控制器中,索引显示哈希中的所有值。

为了更清楚:

 def index
    @counters = Counter.all
 end

我想用类似的东西替换这段代码:

def index
    @counters = REDIS.hget

  end

【讨论】:

    猜你喜欢
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 2011-10-14
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 2013-08-01
    相关资源
    最近更新 更多