Тъй като използвате кеш, трябва да толерирате проблема с несъответствието на данните , т.е. в даден момент от време данните в кеша се различават от данните в базата данни.
Не е необходимо да актуализирате стойността в кеша, когато стойността е променена. В противен случай цялата система за кеширане ще бъде много сложна (например трябва да поддържате списък с ключове, които са били кеширани) и също може да не е необходимо да правите това (например ключ-стойност може да се използва само веднъж и няма нужда за да го актуализирате още).
Как можем да актуализираме данните в кеша и да поддържаме кеш системата проста?
Обикновено, освен задаване или актуализиране на двойка ключ-стойност в кеша, ние също задаваме TIMEOUT
за всеки ключа . След това клиентът може да получи двойката ключ-стойност от кеша. Въпреки това, ако ключът достигне времето за изчакване, кеш системата премахва двойката ключ-стойност от кеша. Това се нарича THE KEY HAS BEEN EXPIRED
. Следващия път, когато клиентът се опитва да получи този ключ от кеша, няма да получи нищо. Това се нарича CACHE MISS
. В този случай клиентът трябва да получи двойката ключ-стойност от базата данни и да я актуализира, за да кешира с ново изчакване.
Ако данните са били актуализирани в базата данни, докато ключът НЕ е изтекъл в кеша, клиентът ще получи непоследователни данни. Въпреки това, когато ключът е изтекъл, стойността му ще бъде извлечена от базата данни и вмъкната в кеша от някой клиент. След това други клиенти ще получават актуализирани данни, докато данните не бъдат променени отново.
Как да настроите времето за изчакване?
Обикновено има два вида правила за изтичане:
- Изтича след
N
секунди/минути/часове... - Изтича в някакъв бъдещ момент, напр. изтича на 30.07.2017 00:00:00
Голямото изчакване може до голяма степен да намали натоварването на базата данни, докато данните може да са остарели за дълго време. Малкото изчакване може да поддържа данните актуални колкото е възможно повече, докато базата данни ще има голямо натоварване. Така че трябва да балансирате компромисите, когато проектирате времето за изчакване .
Как ключовете Redis изтичат?
Redis има два начина за изтичане на ключовете:
- Когато клиентът се опита да работи с ключ, Redis проверява дали ключът е достигнал времето за изчакване. Ако е така, Redis премахва ключа и действа така, сякаш ключът не съществува. По този начин Redis гарантира, че клиентът няма да получи данни с изтекъл срок на валидност.
- Redis също има нишка за изтичане, която пробва ключове с конфигурирана честота. Ако ключовете достигнат времето за изчакване, Redis премахва тези ключове. По този начин Redis може да ускори процеса на изтичане на ключа.