哈希内的 Redis 存储列表

2022-09-01 15:44:30

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

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

我需要针对密钥 CPU 存储多个值。另外,我只需要维护CPU值列表中的最后10个值

1)我如何根据哈希内的密钥存储列表?

2)我读了关于ltrim的文章。但它接受一把钥匙。如何为服务器1中的密钥CPU进行ltrim?

我正在使用jedis。


答案 1

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


答案 2

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

因此,您可以使用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");

或者在地图中使用地图:

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");

推荐