我需要将一些机器的详细信息存储在redis中。由于有很多不同的机器,我计划使用以下结构:
server1 => {name => s1, cpu=>80}
server2 => {name => s2, cpu=>40}
我需要在键CPU下存储多个值。此外,我需要仅在与CPU相关的值列表中维护最后10个值。
1)如何在哈希内对键存储一个列表?
2)我了解了ltrim。但它接受一个键。如何对服务器1中的CPU键执行ltrim?
我正在使用jedis。
我需要将一些机器的详细信息存储在redis中。由于有很多不同的机器,我计划使用以下结构:
server1 => {name => s1, cpu=>80}
server2 => {name => s2, cpu=>40}
我需要在键CPU下存储多个值。此外,我需要仅在与CPU相关的值列表中维护最后10个值。
1)如何在哈希内对键存储一个列表?
2)我了解了ltrim。但它接受一个键。如何对服务器1中的CPU键执行ltrim?
我正在使用jedis。
Redis的数据结构不能嵌套在其他数据结构中,因此无法在哈希中存储列表。相反,使用不同的键来存储服务器的CPU值(例如server1:cpu
)。
使用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");
免责声明:我是 Redisson 的开发者
Nikita Koksharov
是Redisson的创始人和首席开发者。 - Mark在推送数据时,您可以进行编码/序列化,而在获取数据时,您可以进行解码/解析。
编码 -> 解码
序列化 -> 解析