Кэширование (Cache) в ASP.NET Core C#

Кэширование в 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 является эффективным решением для оптимизации производительности приложений. Грамотная настройка и интеграция различных методов кэширования способствует уменьшению нагрузки на ресурсы и повышению отзывчивости системы.