Qual è le migliori pratiche per la lista e la gestione insieme a Redis?

StackOverflow https://stackoverflow.com/questions/4040574

  •  27-09-2019
  •  | 
  •  

Domanda

Stiamo usando Redis come un server di caching, e spesso a che fare con la lista la memorizzazione nella cache. Quando abbiamo cache di oggetti semplici che facciamo un GET e Redis ritorneremo null se l'oggetto non esiste e noi sappiamo che l'oggetto non viene memorizzato nella cache e devono essere caricati dal database.

Ma come possiamo meglio gestire lo stesso per le liste - un elenco vuoto può essere un valore valido. Abbiamo bisogno di chiamata esiste per verificare se esiste la lista (ma rendendo l'operazione 2 chiamate invece di uno) o se qualcuno avere una migliore idea di come gestire questo scenario?

/ Grazie

È stato utile?

Soluzione

Se è assolutamente necessario farlo, quando si crea la lista si può spingere una "sentinella", come primo elemento che non viene mai rimosso. Per fare questo in modo atomico è possibile utilizzare MULTI / EXEC / orologio, ma orologio è disponibile solo in Redis 2.2 che è attualmente in anteprima (anche se abbastanza stabile, si può afferrare da branch master github).

Credo che nel vostro caso d'uso si consiglia inoltre RPUSHX e LPUSHX, che atomicamente spingere in un elenco soltanto se esiste già.

notare che, poichè Redis 2.2 esistere significa avere almeno 1 elemento di una lista, come liste che raggiungeranno zero elementi vengono rimossi automaticamente, per molte ragioni buone;)

Altri suggerimenti

Purtroppo, lista / set comandi di recupero, come LRANGE e SMEMBERS non sembrano distinguere tra un vuoto elenco / set e un elenco inesistente / set.

Quindi, se è assolutamente necessario distinguere tra i due casi, immagino avrete bisogno di fare un primo ESISTE. Prova i comandi pipelining per migliorare le prestazioni. La maggior parte delle librerie client Redis supportano il pipelining.

In alternativa si potrebbe riconsiderare la vostra strategia di cache in modo che non c'è bisogno di distinguerli.

Se si sta utilizzando PHP, vorrei assegnare il valore restituito a una variabile e quindi controllare se si tratta di un array. (Questo è come funziona utilizzando la libreria Predis)

$res = $redis->get('Key');
if(is_array($res))
    do code here
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top