2015-03-23 15 views
10

Devo memorizzare alcuni dettagli della macchina in redis. Poiché ci sono molte macchine che sto pianificando di utilizzare la struttura sottostanteElenco di memorizzazione rosso all'interno dell'hash

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

Ho bisogno di memorizzare più di un valore contro la CPU della chiave. Inoltre ho bisogno di mantenere solo gli ultimi 10 valori nella lista dei valori contro CPU

1) Come posso archiviare una lista contro la chiave all'interno dell'hash?

2) Ho letto di ltrim. Ma accetta una chiave. Come posso fare un ltrim per la chiave cpu all'interno di server1?

Sto usando jedis.

risposta

12

Le strutture di dati di Redis non possono essere nidificate all'interno di altre strutture di dati, quindi non è possibile memorizzare una lista all'interno di un hash. Invece, utilizzare chiavi diverse per i valori della CPU del server (ad esempio server1:cpu).

2

È possibile farlo con il framework Redisson. Permette di memorizzare un riferimento all'oggetto Redis in un altro oggetto Redis attraverso oggetti di riferimento speciali gestiti da Redisson.

Così il vostro compito potrebbe essere risolto utilizzando Lista all'interno Map:

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

O utilizzando Map all'interno Mappa:

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