Redis
 sql >> Database >  >> NoSQL >> Redis

come mantenere aggiornata la cache

Poiché stai utilizzando una cache, devi tollerare il problema dell'incoerenza dei dati , ovvero a un certo punto, i dati nella cache sono diversi dai dati nel database.

Non è necessario aggiornare il valore nella cache ogni volta che il valore è stato modificato. Altrimenti, l'intero sistema di cache sarà molto complicato (ad es. devi mantenere un elenco di chiavi che sono state memorizzate nella cache) e potrebbe anche non essere necessario farlo (ad es. il valore-chiave potrebbe essere utilizzato solo una volta e non è necessario per aggiornarlo ulteriormente).

Come possiamo aggiornare i dati nella cache e mantenere semplice il sistema della cache?

Normalmente, oltre a impostare o aggiornare una coppia chiave-valore nella cache, impostamo anche un TIMEOUT per ogni chiave . Successivamente, il client può ottenere la coppia chiave-valore dalla cache. Tuttavia, se una chiave raggiunge il timeout, il sistema cache rimuove la coppia chiave-valore dalla cache. Questo si chiama THE KEY HAS BEEN EXPIRED . La prossima volta, il client che tenta di ottenere quella chiave dalla cache, non riceverà nulla. Questo si chiama CACHE MISS . In questo caso, il client deve ottenere la coppia chiave-valore dal database e aggiornarla nella cache con un nuovo timeout.

Se i dati sono stati aggiornati nel database, mentre la chiave NON è scaduta nella cache, il client riceverà dati incoerenti. Tuttavia, quando la chiave è scaduta, il suo valore verrà recuperato dal database e inserito nella cache da alcuni client. Successivamente, gli altri client riceveranno i dati aggiornati fino a quando i dati non saranno stati modificati di nuovo.

Come impostare il timeout?

Normalmente, ci sono due tipi di criteri di scadenza:

  1. Scade tra N secondi/minuti/ore...
  2. Scade in un momento futuro, ad es. scadono al 30/7/2017 00:00:00

Un timeout di grandi dimensioni può ridurre ampiamente il carico del database, mentre i dati potrebbero non essere aggiornati per molto tempo. Un piccolo timeout può mantenere i dati aggiornati il ​​più possibile, mentre il database avrà un carico pesante. Quindi devi bilanciare il compromesso durante la progettazione del timeout .

In che modo Redis fa scadere le chiavi?

Redis ha due modi per far scadere le chiavi:

  1. Quando il client tenta di operare su una chiave, Redis controlla se la chiave ha raggiunto il timeout. In tal caso, Redis rimuove la chiave e si comporta come se la chiave non esistesse. In questo modo, Redis garantisce che il cliente non riceva dati scaduti.
  2. Redis ha anche un thread di scadenza che campiona le chiavi a una frequenza configurata. Se le chiavi raggiungono il timeout, Redis rimuove queste chiavi. In questo modo, Redis può accelerare il processo di scadenza delle chiavi.