Buforowanie serializowanych obiektów
Przechowuj i pobieraj złożone obiekty.
Buforowanie serializowanych obiektów to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 4 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.
Buforowanie czegoś więcej niż ciągów znaków
Rzeczywiste aplikacje buforują obiekty, a nie tylko ciągi znaków. Ponieważ IDistributedCache przechowuje bajty, musisz serializować obiekt do reprezentacji w postaci bajtów lub ciągu znaków, a następnie podczas odczytu go deserializować. Zwykle wybiera się format JSON.
Serializowanie za pomocą System.Text.Json
Użyj System.Text.Json, aby przekształcić obiekt w ciąg JSON, a następnie zapisz go za pomocą SetStringAsync.
using System.Text.Json;
var product = new Product { Id = 1, Name = "Coffee", Price = 4.5m };
string json = JsonSerializer.Serialize(product);
await _cache.SetStringAsync("product:1", json);Deserializowanie podczas odczytu
Podczas odczytu pobierz ciąg JSON i zdeserializuj go z powrotem do swojego typu, pamiętając o obsłudze wartości null w przypadku braku trafienia.
string json = await _cache.GetStringAsync("product:1");
if (json is null) return null;
Product product = JsonSerializer.Deserialize<Product>(json);Wielokrotnego użytku pomocnik generyczny
Umieść logikę serializacji i deserializacji w metodach rozszerzających, aby wywołujący mogli w przejrzysty sposób buforować dowolny typ.
public static async Task SetAsync<T>(
this IDistributedCache cache, string key, T value,
DistributedCacheEntryOptions options)
{
string json = JsonSerializer.Serialize(value);
await cache.SetStringAsync(key, json, options);
}Generyczny pomocnik Get
Odpowiadający mu getter deserializuje dane z powrotem do typu T, zwracając default w razie braku trafienia.
public static async Task<T> GetAsync<T>(
this IDistributedCache cache, string key)
{
string json = await cache.GetStringAsync(key);
return json is null ? default : JsonSerializer.Deserialize<T>(json);
}Wzorzec GetOrCreate
Połącz wzorzec cache-aside z serializacją w jednym pomocniku: zwróć obiekt z pamięci podręcznej albo uruchom fabrykę, zapisz jej wynik w pamięci podręcznej i zwróć go.
public static async Task<T> GetOrCreateAsync<T>(
this IDistributedCache cache, string key,
Func<Task<T>> factory, DistributedCacheEntryOptions options)
{
var existing = await cache.GetAsync<T>(key);
if (existing is not null) return existing;
var created = await factory();
await cache.SetAsync(key, created, options);
return created;
}Korzystanie z GetOrCreate
Miejsce wywołania staje się pojedynczym wierszem, który ukrywa wszystkie szczegóły buforowania.
var product = await _cache.GetOrCreateAsync(
"product:1",
() => _repository.LoadProductAsync(1),
new DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(15)
});Opcje serializatora
Wielokrotnie używaj jednej instancji JsonSerializerOptions (na przykład z ustawieniami camelCase i ignorowaniem wartości null), aby zachować spójność i niewielki rozmiar buforowanych danych oraz uniknąć wielokrotnego alokowania opcji.
private static readonly JsonSerializerOptions JsonOptions = new()
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
DefaultIgnoreCondition =
System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull
};Wersjonowanie struktur buforowanych danych
Jeśli zmieni się struktura buforowanego typu, stary JSON może nie dać się zdeserializować. Uwzględnij segment wersji w kluczu, na przykład product:v2:1, aby wdrożenie automatycznie omijało niezgodne wpisy.
Utrzymuj niewielkie dane
Buforuj tylko potrzebne pola. Mniejsze dane oznaczają mniejsze zużycie sieci i pamięci w Redis oraz szybszą serializację przy każdym odczycie i zapisie.
Pamiętaj o koszcie serializacji
Serializacja nie jest bezpłatna. W przypadku bardzo często wykonywanych ścieżek rozważ kompaktowe formaty lub buforowanie wstępnie wygenerowanych wyników, a także zawsze wykonuj pomiary, aby potwierdzić, że pamięć podręczna rzeczywiście przynosi korzyści.
Szybki test
Przetestuj buforowanie serializowanych obiektów.
Podsumowanie
Aby buforować obiekty, serializuj je podczas zapisu (zwykle do JSON za pomocą System.Text.Json) i deserializuj podczas odczytu. Generyczne metody SetAsync<T>/GetAsync<T> oraz pomocnik GetOrCreateAsync ukrywają szczegóły i przejrzyście implementują wzorzec cache-aside. Używaj ponownie JsonSerializerOptions, wersjonuj klucze pamięci podręcznej po zmianie struktur danych, utrzymuj niewielkie dane i mierz koszt serializacji w najbardziej obciążonych ścieżkach.
Często zadawane pytania
Czy lekcja „Buforowanie serializowanych obiektów” jest bezpłatna?
Tak — pełny tekst „Buforowanie serializowanych obiektów” 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 „Buforowanie serializowanych obiektów”?
Przechowuj i pobieraj złożone obiekty. Ć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 4 z 4.
Ile czasu zajmuje lekcja „Buforowanie serializowanych obiektów”?
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