web-dev-qa-db-ja.com

ハッシュ内のRedis保存リスト

一部のマシンの詳細をredisに保存する必要があります。多くの異なるマシンがあるので、私は以下の構造を使用することを計画しています

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

キーCPUに対して複数の値を保存する必要があります。また、私はCPUに対する値のリストの最後の10個の値のみを維持する必要があります

1)ハッシュ内のキーに対してリストをどのように保存できますか?

2)私はltrimについて読みました。しかし、それはキーを受け入れます。 server1内のキーCPUのltrimを実行するにはどうすればよいですか?

私はjedisを使用しています。

18
Shabin Hashim

Redisのデータ構造を他のデータ構造内にネストすることはできないため、ハッシュ内にリストを格納することはできません。代わりに、サーバーのCPU値に異なるキーを使用してください(例:server1:cpu)。

21
Itamar Haber

Redisson フレームワークでこれを行うことができます。 Redissonが処理する特別な参照オブジェクトを使用して、Redisオブジェクトへの参照を別のRedisオブジェクトに保存できます。

したがって、マップ内のリストを使用してタスクを解決できます:

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