Redis сохраняет список внутри хэша

Мне нужно сохранить некоторые детали машины в redis. Поскольку существует множество разных машин, я планирую использовать нижерасположенную структуру.

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

Мне нужно сохранить более одного значения против ключевого CPU. Также мне нужно сохранить только последние 10 значений в списке значений против cpu

1) Как я могу сохранить список против ключа внутри хэша?

2) Я читал об ltrim. Но он принимает ключ. Как я могу сделать ltrim для ключевого процессора внутри server1?

Я использую jedis.

Ответ 1

Структуры данных Redis не могут быть вложены в другие структуры данных, поэтому сохранение списка внутри хэша невозможно. Вместо этого используйте разные ключи для значений центрального процессора (например, server1:cpu ).

Ответ 2

Это можно сделать с помощью Redisson framework. Он позволяет хранить ссылку на объект Redis в другом объекте Redis, хотя это специальные ссылочные объекты, которые обрабатываются Redisson.

Таким образом, ваша задача может быть решена с использованием списка внутри карты:

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