В частности, есть ли в .Net Core (3.0 или более ранней версии) способ использовать локальную файловую систему в качестве кэша ответов вместо просто в памяти?
После достаточного количества исследований самым близким кажется промежуточное ПО для кэширования ответов [1], но это не так:
- позволяет кэшировать страницы неограниченно,
- сохранить кеш между перезапусками приложений и серверов,
- разрешить аннулирование кэша для каждой страницы (например, обновлена запись в блоге),
- позволяет сделать недействительным весь кэш при внесении глобальных изменений (например, обновление темы, изменения меню и т. Д.).
Я предполагаю, что эти функции потребуют пользовательской реализации ResponseCaching, которая затрагивает локальную файловую систему, но я не хочу изобретать его, если он уже существует.
Некоторый фон:
Это заменит наше использование статического генератора сайтов, который проблематичен для изменений всего сайта из-за огромного количества данных (почти 24 часа для генерации и копирования на все серверы).
Сценарий очень похож на энциклопедию или новостной сайт - подавляющее большинство контента меняется нечасто, некоторые вещи добавляются в день, и нет контента для конкретного пользователя (и если или когда он есть, он будет динамически загружаться через JS / Ajax). Кроме того, страницы загружаются слишком интенсивно - процессор / память / база данных.
Мы будем использовать обратный прокси-сервер, такой как CloudFlare или AWS CloudFront, но AWS автоматически истекает свои пограничные кэши ежедневно. Пропуски кэша пограничного узла все еще часты.
Это отличается от IDistributedCache [2] тем, что это должно быть кэширование ответов, а не только кэширование данных, используемых моделью MVC.
Мы также будем использовать кэш в памяти [3], но опять же, это решает другой сценарий кэширования.
Ссылки
[1] https://docs.microsoft.com/en-us/aspnet/core/performance/caching/middleware
[2] https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed
[3] https://docs.microsoft.com/en-us/aspnet/core/performance/caching/memory