0Pricing
C# Academy · Lekcja

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

  1. Abstrakcja IDistributedCache
  2. Łączenie z Redis
  3. Wzorce buforowania i wygasanie
  4. Buforowanie serializowanych obiektów
← Powrót do C# Academy