【问题标题】:Redis storing list inside hashRedis在哈希中存储列表
【发布时间】:2015-05-26 01:22:45
【问题描述】:

我必须在 redis 中存储一些机器详细信息。由于有许多不同的机器,我打算使用以下结构

server1 => {name => s1, cpu=>80}
server2 => {name => s2, cpu=>40}

我需要针对关键 CPU 存储多个值。此外,我只需要针对 cpu 维护值列表中的最后 10 个值

1) 我如何在哈希内存储一个列表?

2) 我读到了 ltrim。但它接受一个密钥。如何为 server1 内的关键 cpu 进行 ltrim?

我正在使用绝地武士。

【问题讨论】:

  • 4 年前,现在,您可以使用redis-protobuf 模块将嵌套数据结构保存到 Redis。 免责声明:我是本模块的作者。
  • @for_stack 这一切都很好。我们如何在 redislabs 部署中进行这种自定义?
  • @eigenfield 抱歉,我不熟悉 redislabs 部署,但我认为您可以简单地构建模块,并使用 loadmodule 配置进行配置。您也可以向@Itamar Haber 寻求帮助。我相信他的建议会很有帮助:)

标签: java redis


【解决方案1】:

Redis 的数据结构不能嵌套在其他数据结构中,因此无法将 List 存储在 Hash 中。相反,为服务器的 CPU 值使用不同的键(例如 server1:cpu)。

【讨论】:

    【解决方案2】:

    使用Redisson 框架可以做到这一点。它允许通过由 Redisson 处理的特殊引用对象将对 Redis 对象的引用存储在另一个 Redis 对象中。

    所以你的任务可以使用 Map 中的 List 来解决:

    RMap<String, RList<Option>> settings = redisson.getMap("settings");
    
    RList<Option> options1 = redisson.getList("settings_server1_option");
    options1.add(new Option("name", "s1"));
    options1.add(new Option("cpu", "80"));
    settings.put("server1", options1);
    
    RList<Option> options2 = redisson.getList("settings_server2_option");
    options2.add(new Option("name", "s2"));
    options2.add(new Option("cpu", "40"));
    settings.put("server2", options2);
    
    // read it
    RList<Option> options2Value = settings.get("server2");
    

    或者在 Map 中使用 Map:

    RMap<String, RMap<String, String>> settings = redisson.getMap("settings");
    
    RMap<String, String> options1 = redisson.getMap("settings_server1_option");
    options1.put("name", "s1");
    options1.put("cpu", "80");
    settings.put("server1", options1);
    
    RMap<String, String> options2 = redisson.getMap("settings_server2_option");
    options2.put("name", "s2");
    options2.put("cpu", "40");
    settings.put("server2", options1);
    
    // read it
    RMap<String, String> options2Value = settings.get("server2");
    

    【讨论】:

    • 所以我必须创建单独的 RList 并命名它们?那么当我从 RMap 中删除一个条目时,我还必须以某种方式清理或删除 RList 吗?我必须管理吗? RMap 可能是暂时的,污染肯定会增加。然后必须在添加之前命名 RList,因此必须将密钥作为名称提供给 RList。似乎是一个很好的大混乱。考虑坚持使用 SQL。似乎无法管理东西。
    【解决方案3】:

    您可以对推送数据进行编码/字符串化,同时拉取数据您可以解码/解析数据。

    编码 -> 解码

    字符串化 -> 解析

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      相关资源
      最近更新 更多