Redis存储列表内的哈希

时间:2015-03-23 05:19:23

标签: java redis

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

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

我需要针对关键CPU存储多个值。另外,我只需要在cpu

的值列表中仅保留最后10个值

1)如何针对散列内的密钥存储列表?

2)我读到了ltrim。但它接受了一把钥匙。如何为server1中的密钥cpu执行ltrim?

我正在使用jedis。

3 个答案:

答案 0 :(得分:18)

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

答案 1 :(得分:5)

可以使用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");

答案 2 :(得分:1)

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

<块引用>

编码 -> 解码

<块引用>

字符串化 -> 解析