Ponieważ używasz pamięci podręcznej, musisz tolerować problem niespójności danych , tj. w pewnym momencie dane w pamięci podręcznej różnią się od danych w bazie danych.
Nie musisz aktualizować wartości w pamięci podręcznej po każdej zmianie wartości. W przeciwnym razie cały system pamięci podręcznej będzie bardzo skomplikowany (np. będziesz musiał prowadzić listę kluczy, które zostały zbuforowane), a także może to być niepotrzebne (np. klucz-wartość może być użyta tylko raz i nie ma potrzeby aby go zaktualizować).
Jak możemy zaktualizować dane w pamięci podręcznej i zachować prostotę systemu pamięci podręcznej?
Zwykle, oprócz ustawiania lub aktualizowania pary klucz-wartość w pamięci podręcznej, ustawiamy także TIMEOUT
dla każdego klawisza . Następnie klient może pobrać parę klucz-wartość z pamięci podręcznej. Jeśli jednak klucz osiągnie limit czasu, system pamięci podręcznej usuwa parę klucz-wartość z pamięci podręcznej. Nazywa się to THE KEY HAS BEEN EXPIRED
. Następnym razem klient próbujący pobrać ten klucz z pamięci podręcznej, nic nie otrzyma. Nazywa się to CACHE MISS
. W takim przypadku klient musi pobrać parę klucz-wartość z bazy danych i zaktualizować ją do pamięci podręcznej z nowym limitem czasu.
Jeśli dane zostały zaktualizowane w bazie danych, a klucz NIE wygasł w pamięci podręcznej, klient otrzyma niespójne dane. Jednak gdy klucz wygaśnie, jego wartość zostanie pobrana z bazy danych i umieszczona w pamięci podręcznej przez jakiegoś klienta. Następnie inni klienci będą otrzymywać zaktualizowane dane, dopóki dane nie zostaną ponownie zmienione.
Jak ustawić limit czasu?
Zwykle istnieją dwa rodzaje zasad wygaśnięcia:
- Wygasa za
N
sekundy/minuty/godziny... - Wygasa w pewnym momencie w przyszłości, np. wygasa 30.07.2017 00:00:00
Duży limit czasu może znacznie zmniejszyć obciążenie bazy danych, a dane mogą być nieaktualne przez długi czas. Niewielki limit czasu może zapewnić jak największą aktualność danych, podczas gdy baza danych będzie mocno obciążona. Więc musisz zrównoważyć kompromis podczas projektowania limitu czasu .
Jak Redis wygasa klucze?
Redis ma dwa sposoby wygaśnięcia kluczy:
- Gdy klient próbuje operować na kluczu, Redis sprawdza, czy upłynął limit czasu klucza. Jeśli tak, Redis usuwa klucz i działa tak, jakby klucz nie istniał. W ten sposób Redis zapewnia, że klient nie otrzyma wygasłych danych.
- Redis ma również wątek wygaśnięcia, który próbkuje klucze ze skonfigurowaną częstotliwością. Jeśli klucze osiągną limit czasu, Redis usuwa te klucze. W ten sposób Redis może przyspieszyć proces wygaśnięcia klucza.