Ответ
Cache Expiration Time (TTL - Time To Live) — это политика, определяющая, как долго данные могут храниться в кэше до того, как они будут считаться устаревшими и удалены или обновлены. Правильная настройка TTL критична для баланса между производительностью (меньше обращений к источнику) и актуальностью данных.
Основные стратегии истечения срока действия:
-
Абсолютное истечение (Absolute Expiration): Данные удаляются в конкретный момент времени.
- Пример: Кэшировать список городов на 24 часа.
-
Скользящее истечение (Sliding Expiration): Таймер сбрасывается при каждом обращении к данным. Если к данным не обращаются в течение заданного интервала, они удаляются.
- Пример: Кэшировать сессию пользователя, которая должна быть активна, пока пользователь взаимодействует с приложением.
Пример настройки в C# с IMemoryCache:
// Создание опций для записи в кэш
var cacheEntryOptions = new MemoryCacheEntryOptions
{
// Абсолютное истечение: удалить через 5 минут
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5),
// Скользящее истечение: сбросить таймер при каждом чтении, удалить, если не использовались 2 минуты
SlidingExpiration = TimeSpan.FromMinutes(2),
// Приоритет кэша (может влиять на вытеснение при нехватке памяти)
Priority = CacheItemPriority.High
};
// Добавление данных в кэш
_memoryCache.Set("popularProducts", productList, cacheEntryOptions);
Пример с IDistributedCache (например, Redis):
await distributedCache.SetStringAsync("config", jsonData, new DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1)
});
Ключевые соображения:
- Если заданы оба типа истечения (
AbsoluteиSliding), запись удаляется при наступлении первого из событий. SlidingExpirationидеально подходит для часто используемых, «горячих» данных.AbsoluteExpirationлучше для данных, которые устаревают по расписанию (например, ежедневные отчеты).- Истечение срока — это обычно «ленивая» операция; удаление может произойти не мгновенно в момент истечения TTL.