Protože používáte mezipaměť, musíte tolerovat problém s nekonzistencí dat , tj. v určitém časovém okamžiku se data v mezipaměti liší od dat v databázi.
Není třeba aktualizovat hodnotu v mezipaměti, kdykoli byla hodnota změněna. V opačném případě bude celý systém mezipaměti velmi komplikovaný (např. budete muset udržovat seznam klíčů, které byly uloženy v mezipaměti), a také to může být zbytečné (např. pár klíč–hodnota může být použit pouze jednou a není třeba jej ještě aktualizovat).
Jak můžeme aktualizovat data v mezipaměti a udržovat systém mezipaměti jednoduchý?
Obvykle kromě nastavení nebo aktualizace páru klíč–hodnota v mezipaměti také nastavíme TIMEOUT
pro každý klíč . Poté může klient získat pár klíč-hodnota z mezipaměti. Pokud však klíč dosáhne časového limitu, systém mezipaměti odstraní pár klíč-hodnota z mezipaměti. Toto se nazývá THE KEY HAS BEEN EXPIRED
. Při příštím pokusu klienta získat tento klíč z mezipaměti nezíská nic. Toto se nazývá CACHE MISS
. V tomto případě musí klient získat pár klíč–hodnota z databáze a aktualizovat jej do mezipaměti s novým časovým limitem.
Pokud byla data v databázi aktualizována a klíč v mezipaměti NEVYŠEL, klient získá nekonzistentní data. Po vypršení platnosti klíče však bude jeho hodnota načtena z databáze a vložena do mezipaměti některým klientem. Poté budou ostatní klienti dostávat aktualizovaná data, dokud nebudou data znovu změněna.
Jak nastavit časový limit?
Obvykle existují dva druhy zásad vypršení platnosti:
- Platnost vyprší za
N
sekundy/minuty/hodiny... - Vyprší někdy v budoucnu, např. vyprší k 30. 7. 2017 00:00:00
Velký časový limit může značně snížit zatížení databáze, zatímco data mohou být po dlouhou dobu neaktuální. Malý časový limit může udržovat data co nejvíce aktuální, zatímco databáze bude silně zatěžována. Takže musíte vyvážit kompromis při navrhování časového limitu .
Jak vyprší platnost klíčů Redis?
Redis má dva způsoby vypršení platnosti klíčů:
- Když se klient pokusí pracovat s klíčem, Redis zkontroluje, zda klíč dosáhl vypršení časového limitu. Pokud ano, Redis odstraní klíč a chová se, jako by klíč neexistoval. Tímto způsobem Redis zajišťuje, že klient nedostane data, jejichž platnost vypršela.
- Redis má také vlákno vypršení platnosti, které vzorkuje klíče v nakonfigurované frekvenci. Pokud klíče dosáhnou časového limitu, Redis tyto klíče odstraní. Tímto způsobem může Redis urychlit proces vypršení platnosti klíče.