Wzorce buforowania i wygasanie
Stosuj wzorzec cache-aside i ustawiaj czas wygaśnięcia.
Wzorce buforowania i wygasanie to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 4 lekcji w sumie.
Wzorce buforowania
Sposób odczytywania i zapisywania danych w pamięci podręcznej to wzorzec. Najczęściej stosowany w aplikacjach internetowych jest cache-aside, w którym kod zarządza pamięcią podręczną wokół źródła danych.
Wzorzec cache-aside
Wzorzec cache-aside (leniwe ładowanie) działa w trzech krokach: sprawdź pamięć podręczną; w razie braku trafienia wczytaj dane ze źródła i uzupełnij pamięć podręczną; zwróć wartość. Pamięć podręczna jest uzupełniana na żądanie.
async Task<string> GetForecastAsync(string city)
{
string key = $"forecast:{city}";
string cached = await _cache.GetStringAsync(key);
if (cached is not null) return cached;
string fresh = await _api.LoadForecastAsync(city);
await _cache.SetStringAsync(key, fresh);
return fresh;
}Dlaczego wygasanie jest niezbędne
Buforowane dane mogą stać się nieaktualne. Wygasanie automatycznie usuwa wpisy po określonym czasie, dzięki czemu następny odczyt wczyta aktualne dane, równoważąc wydajność i ryzyko nieaktualności.
Wygasanie bezwzględne
Wygasanie bezwzględne usuwa wpis o określonym czasie, niezależnie od tego, czy jest używany. Stosuj je, gdy dane są ważne tylko w znanym przedziale czasu.
var options = new DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
};Wygasanie przesuwane
Wygasanie przesuwane resetuje licznik czasu przy każdym dostępie. Wpis pozostaje tak długo, jak długo jest regularnie używany, ale zostaje usunięty po okresie bezczynności. To dobre rozwiązanie dla danych przypominających dane sesji.
var options = new DistributedCacheEntryOptions
{
SlidingExpiration = TimeSpan.FromMinutes(5)
};Łączenie obu ustawień
Możesz ustawić oba rodzaje wygasania: wygasanie przesuwane utrzymuje często używane dane, a limit bezwzględny gwarantuje, że wpis nie będzie przechowywany dłużej niż przez maksymalny czas, wymuszając jego odświeżenie.
var options = new DistributedCacheEntryOptions
{
SlidingExpiration = TimeSpan.FromMinutes(5),
AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1)
};Stosowanie opcji podczas zapisu
Przekaż opcje jako trzeci argument do SetStringAsync (lub SetAsync), aby wpis zawierał własną regułę wygasania.
await _cache.SetStringAsync(key, fresh, options);Zapis synchroniczny i unieważnianie
Gdy dane źródłowe się zmieniają, usuń wpis z pamięci podręcznej lub go zaktualizuj, aby odczyty nie zwracały nieaktualnych wartości. Wzorzec cache-aside zwykle łączy zapis z wywołaniem RemoveAsync dla zmienionego klucza.
await _repository.UpdateForecastAsync(city, value);
await _cache.RemoveAsync($"forecast:{city}");Unikanie lawiny żądań do pamięci podręcznej
Jeśli popularny klucz wygaśnie, wiele żądań może jednocześnie spróbować go wczytać ponownie, powodując lawinę. Można temu przeciwdziałać za pomocą krótkich blokad, nieznacznie losowych czasów wygasania lub odświeżania w tle, aby tylko jedno żądanie odbudowywało wpis.
Dobieranie wartości wygasania
Dobieraj czas trwania na podstawie częstotliwości zmian danych i akceptowalnego poziomu ich nieaktualności. Dane referencyjne tolerują długie wartości TTL, natomiast szybko zmieniające się dane wymagają krótkich wartości TTL lub unieważniania opartego na zdarzeniach.
Koszt braku trafienia
Każdy brak trafienia oznacza koszt wczytania danych ze źródła, dlatego projektuj klucze i wartości TTL tak, aby maksymalizować współczynnik trafień. Monitoruj współczynniki trafień i nietrafień, aby z czasem dostrajać pamięć podręczną.
Szybki test
Przetestuj wzorce buforowania i wygasanie.
Podsumowanie
Wzorzec cache-aside sprawdza pamięć podręczną, wczytuje dane w razie braku trafienia i uzupełnia nią pamięć podręczną. Wygasanie bezwzględne usuwa wpis o określonym czasie, a wygasanie przesuwane resetuje czas przy każdym dostępie; oba rodzaje można łączyć za pomocą DistributedCacheEntryOptions. Unieważniaj wpisy po zapisach za pomocą RemoveAsync, zabezpieczaj się przed lawiną żądań i dostrajaj wartości TTL oraz klucze na podstawie sposobu dostępu i akceptowalnego poziomu nieaktualności danych.
Często zadawane pytania
Czy lekcja „Wzorce buforowania i wygasanie” jest bezpłatna?
Tak — pełny tekst „Wzorce buforowania i wygasanie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Wzorce buforowania i wygasanie”?
Stosuj wzorzec cache-aside i ustawiaj czas wygaśnięcia. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C# Academy?
Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Wzorce buforowania i wygasanie”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?
Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Abstrakcja IDistributedCache
- Łączenie z Redis
- Wzorce buforowania i wygasanie
- Buforowanie serializowanych obiektów