Кэширование в ASP.NET Core представляет собой механизм, позволяющий оптимизировать производительность приложения за счет временного хранения данных в памяти или распределённом хранилище. Это снижает нагрузку на источник данных и уменьшает время отклика системы.
Типы кэширования
В ASP.NET Core используются несколько видов кэширования:
- Кэширование в памяти (In-Memory Caching) – хранение данных в оперативной памяти сервера.
- Распределённое кэширование (Distributed Caching) – использование внешних кэш-систем, таких как Redis или SQL Server, для синхронизации кэша между серверами.
- Кэширование ответов (Response Caching) – сохранение ответов HTTP для последующего повторного использования.
Кэширование в памяти
Встроенный механизм кэширования в памяти реализуется через сервис IMemoryCache. Пример ниже демонстрирует базовую логику извлечения данных с проверкой наличия записи в кэше.
public class DataService
{
private readonly IMemoryCache _cache;
public DataService(IMemoryCache cache)
{
_cache = cache;
}
public string GetData(string key)
{
if (!_cache.TryGetValue(key, out string value))
{
value = "Данные из источника";
var cacheEntryOptions = new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromMinutes(5));
_cache.Set(key, value, cacheEntryOptions);
}
return value;
}
}
Распределённое кэширование
Распределённое кэширование применяется для сценариев, когда приложение работает на нескольких серверах. Использование IDistributedCache позволяет сохранять данные в едином внешнем хранилище.
public class DistributedDataService
{
private readonly IDistributedCache _cache;
public DistributedDataService(IDistributedCache cache)
{
_cache = cache;
}
public async Task<string> GetDataAsync(string key)
{
var data = await _cache.GetStringAsync(key);
if (data == null)
{
data = "Данные из удалённого источника";
var options = new DistributedCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(10));
await _cache.SetStringAsync(key, data, options);
}
return data;
}
}
Кэширование ответов
Для кэширования HTTP-ответов используется атрибут ResponseCache, который позволяет задать длительность кэширования для конкретного действия контроллера.
[ResponseCache(Duration = 60)]
public IActionResult GetContent()
{
return Content("Контент, кэшированный на 60 секунд");
}
Конфигурация кэширования в ASP.NET Core
Внедрение кэширования осуществляется через регистрацию соответствующих сервисов в методе ConfigureServices. Пример конфигурации демонстрирует добавление сервисов для кэширования в памяти, распределённого кэша и кэширования ответов.
public void ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
services.AddDistributedMemoryCache();
services.AddResponseCaching();
}
Интеграция и использование
Интеграция кэширования в архитектуру приложения позволяет значительно повысить его производительность. Кэширование может применяться как на уровне отдельных сервисов, так и для контроллеров, отвечающих за обработку запросов. Выбор типа кэширования определяется требованиями к масштабируемости, доступности и времени жизни кэшированных данных.
Применение кэширования в ASP.NET Core является эффективным решением для оптимизации производительности приложений. Грамотная настройка и интеграция различных методов кэширования способствует уменьшению нагрузки на ресурсы и повышению отзывчивости системы.