2015-03-23 5 views
10

Ich muss einige Maschinendetails in redis speichern. Da es viele verschiedenen Maschinen plane ich die unten gezeigte StrukturRedis speichern Liste innerhalb Hash

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

ich mehr als einen Wert gegen den Schlüssel CPU speichern, verwenden muß. Auch ich muss nur die letzten 10 Werte in der Liste der Werte gegen CPU behalten

1) Wie kann ich eine Liste gegen den Schlüssel innerhalb des Haschs speichern?

2) Ich lese über ltrim. Aber es akzeptiert einen Schlüssel. Wie kann ich einen ltrim für die Schlüssel-CPU in Server1 tun?

Ich benutze Jedis.

Antwort

12

Die Datenstrukturen von Redis können nicht in anderen Datenstrukturen verschachtelt werden, daher ist das Speichern einer Liste in einem Hash nicht möglich. Verwenden Sie stattdessen andere Schlüssel für die CPU-Werte Ihres Servers (z. B. server1:cpu).

2

Es ist möglich, dies mit Redisson Framework zu tun. Es ermöglicht das Speichern eines Verweises auf das Redis-Objekt in einem anderen Redis-Objekt über spezielle Referenzobjekte, die von Redisson bearbeitet werden.

So könnte Ihre Aufgabe gelöst werden Liste innerhalb Karte mit:

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

oder mit Karte nach innen Karte:

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