0Pricing
C# Academy · Урок

Кэширование сериализованных объектов

Сохраняйте и извлекайте сложные объекты.

«Кэширование сериализованных объектов» — бесплатный урок C# Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.

Кэширование не только строк

Настоящие приложения кэшируют не только строки, но и объекты. Поскольку IDistributedCache хранит байты, необходимо сериализовать объект в представление в виде байтов или строки, а при извлечении выполнить десериализацию. Обычно выбирают JSON.

Сериализация с помощью System.Text.Json

Используйте System.Text.Json, чтобы преобразовать объект в строку JSON, а затем сохраните её с помощью 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);

Десериализация при чтении

При чтении получите строку JSON и десериализуйте её обратно в нужный тип, не забыв обработать null при промахе кэша.

string json = await _cache.GetStringAsync("product:1");
if (json is null) return null;
Product product = JsonSerializer.Deserialize<Product>(json);

Повторно используемый обобщённый помощник

Оберните логику сериализации и десериализации в методы расширения, чтобы вызывающий код мог удобно кэшировать значения любого типа.

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);
}

Обобщённый помощник Get

Соответствующий метод чтения десериализует данные обратно в T, возвращая default при промахе.

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);
}

Шаблон GetOrCreate

Объедините кэш на стороне приложения с сериализацией в одном помощнике: верните объект из кэша либо выполните фабрику, сохраните её результат в кэше и верните его.

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;
}

Использование GetOrCreate

Место вызова превращается в одну строку, скрывающую всю механику кэширования.

var product = await _cache.GetOrCreateAsync(
    "product:1",
    () => _repository.LoadProductAsync(1),
    new DistributedCacheEntryOptions
    {
        AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(15)
    });

Параметры сериализатора

Повторно используйте один экземпляр JsonSerializerOptions (например, с именами в стиле camelCase и игнорированием значений null), чтобы кэшированные данные имели единообразный и компактный формат, а параметры не создавались заново при каждом вызове.

private static readonly JsonSerializerOptions JsonOptions = new()
{
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
    DefaultIgnoreCondition =
        System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull
};

Версионирование структуры кэшированных данных

Если структура кэшированного типа изменится, старый JSON может не десериализоваться. Включите сегмент версии в ключ, например product:v2:1, чтобы после развёртывания несовместимые записи автоматически обходились.

Сохраняйте данные компактными

Кэшируйте только нужные поля. Чем меньше данные, тем меньше сетевых ресурсов и памяти они используют в Redis и тем быстрее выполняется сериализация при каждом чтении и записи.

Учитывайте стоимость сериализации

Сериализация не бесплатна. Для очень часто выполняемых участков рассмотрите компактные форматы или кэширование предварительно сформированных результатов и всегда измеряйте эффект, чтобы убедиться, что кэш действительно даёт общую выгоду.

Быстрая проверка

Проверьте кэширование сериализованных объектов.

Итоги

Чтобы кэшировать объекты, сериализуйте их (обычно в JSON с помощью System.Text.Json) при записи и десериализуйте при чтении. Обобщённые методы SetAsync<T>/GetAsync<T> и помощник GetOrCreateAsync скрывают механику и корректно реализуют кэш на стороне приложения. Повторно используйте JsonSerializerOptions, обновляйте версии ключей кэша при изменении структуры данных, сохраняйте данные компактными и измеряйте стоимость сериализации на часто выполняемых участках.

Часто задаваемые вопросы

Урок «Кэширование сериализованных объектов» бесплатный?

Да — полный текст урока «Кэширование сериализованных объектов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.

Чему я научусь в уроке «Кэширование сериализованных объектов»?

Сохраняйте и извлекайте сложные объекты. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Кэширование сериализованных объектов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Абстракция IDistributedCache
  2. Подключение к Redis
  3. Шаблоны кэширования и истечение срока действия
  4. Кэширование сериализованных объектов
← Назад к C# Academy