Шаблоны кэширования и истечение срока действия
Применяйте кэширование по требованию и задавайте сроки действия.
«Шаблоны кэширования и истечение срока действия» — бесплатный урок C# Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.
Шаблоны кэширования
То, как вы читаете данные из кэша и записываете их в него, называется шаблоном. Самый распространённый шаблон в веб-приложениях — кэш на стороне приложения, при котором код управляет кэшем вокруг источника данных.
Шаблон кэша на стороне приложения
Кэш на стороне приложения (ленивая загрузка) работает в три шага: проверьте кэш; при промахе загрузите данные из источника и заполните кэш; верните значение. Кэш заполняется по мере необходимости.
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;
}Почему истечение срока действия необходимо
Кэшированные данные могут устареть. Истечение срока действия автоматически удаляет записи через заданный промежуток времени, чтобы следующее чтение загрузило свежие данные, уравновешивая производительность и актуальность.
Абсолютный срок действия
Абсолютный срок действия удаляет запись в фиксированный момент времени независимо от использования. Применяйте его, когда данные действительны только в известном временном интервале.
var options = new DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
};Скользящий срок действия
Скользящий срок действия сбрасывает таймер при каждом обращении. Запись сохраняется, пока используется регулярно, но удаляется после периода бездействия. Это особенно удобно для данных, похожих на данные сеанса.
var options = new DistributedCacheEntryOptions
{
SlidingExpiration = TimeSpan.FromMinutes(5)
};Сочетание обоих вариантов
Можно задать оба варианта: скользящий срок действия сохраняет часто используемые данные, а абсолютное ограничение гарантирует, что запись не будет жить дольше максимального срока и в итоге будет обновлена.
var options = new DistributedCacheEntryOptions
{
SlidingExpiration = TimeSpan.FromMinutes(5),
AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1)
};Применение параметров при записи
Передайте параметры третьим аргументом в SetStringAsync (или SetAsync), чтобы запись содержала собственную политику истечения срока действия.
await _cache.SetStringAsync(key, fresh, options);Сквозная запись и инвалидация
Когда исходные данные изменяются, удаляйте запись из кэша или обновляйте её, чтобы при чтении не возвращались устаревшие значения. Шаблон кэша на стороне приложения обычно связывает запись с вызовом RemoveAsync для затронутого ключа.
await _repository.UpdateForecastAsync(city, value);
await _cache.RemoveAsync($"forecast:{city}");Предотвращение лавины запросов к кэшу
Если популярный ключ истекает, множество запросов может одновременно загрузить его заново — возникает лавина. Снизить этот риск можно с помощью коротких блокировок, слегка рандомизированных сроков действия или фонового обновления, чтобы запись перестраивал только один запрос.
Выбор сроков действия
Выбирайте продолжительность с учётом того, как часто изменяются данные и какой уровень устаревания приемлем. Справочные данные допускают длительные сроки хранения, а часто меняющимся данным нужны короткие сроки или инвалидация по событиям.
Цена промаха кэша
Каждый промах требует загрузки из источника, поэтому проектируйте ключи и сроки хранения так, чтобы увеличить долю попаданий. Отслеживайте соотношение попаданий и промахов, чтобы со временем настраивать кэш.
Быстрая проверка
Проверьте шаблоны кэширования и истечение срока действия.
Итоги
Шаблон кэша на стороне приложения проверяет кэш, при промахе загружает данные и заполняет кэш. Абсолютный срок действия удаляет запись в фиксированный момент, а скользящий срок действия сбрасывается при обращении; объединяйте их с помощью DistributedCacheEntryOptions. При записи выполняйте инвалидацию с помощью RemoveAsync, защищайтесь от лавины запросов и настраивайте сроки хранения и ключи с учётом характера обращений и допустимого устаревания.
Часто задаваемые вопросы
Урок «Шаблоны кэширования и истечение срока действия» бесплатный?
Да — полный текст урока «Шаблоны кэширования и истечение срока действия» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.
Чему я научусь в уроке «Шаблоны кэширования и истечение срока действия»?
Применяйте кэширование по требованию и задавайте сроки действия. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Шаблоны кэширования и истечение срока действия»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Абстракция IDistributedCache
- Подключение к Redis
- Шаблоны кэширования и истечение срока действия
- Кэширование сериализованных объектов