Можно ли настроить .Net Core на использование файловой системы для кэширования ответов? - PullRequest
1 голос
/ 14 апреля 2019

В частности, есть ли в .Net Core (3.0 или более ранней версии) способ использовать локальную файловую систему в качестве кэша ответов вместо просто в памяти?

После достаточного количества исследований самым близким кажется промежуточное ПО для кэширования ответов [1], но это не так:

  1. позволяет кэшировать страницы неограниченно,
  2. сохранить кеш между перезапусками приложений и серверов,
  3. разрешить аннулирование кэша для каждой страницы (например, обновлена ​​запись в блоге),
  4. позволяет сделать недействительным весь кэш при внесении глобальных изменений (например, обновление темы, изменения меню и т. Д.).

Я предполагаю, что эти функции потребуют пользовательской реализации 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

1 Ответ

0 голосов
/ 15 апреля 2019

В настоящее время (апрель 2019 г.) ответ выглядит так: нет , для этого нет ничего нестандартного.

Существует три жизнеспособных подхода для достижения этой цели с использованием .Net Core:

  1. Создайте встроенное промежуточное ПО ResponseCaching и создайте флаг для кэширования на диск:

    https://github.com/aspnet/AspNetCore/tree/master/src/Middleware/ResponseCaching

    Это может раздражать, потому что пространства имен и имена классов будут конфликтовать с базовой платформой.

  2. Реализация этой отсутствующей функции в EasyCaching, которая, очевидно, уже имеет кэширование на диск на своем радаре:

    https://github.com/dotnetcore/EasyCaching/blob/master/ToDoList.md

    Скорее всего, пул-запрос может быть принят, поскольку это запланированная функция.

  3. По-видимому, имеется порт Strathweb.CacheOutput для .Net Core, который позволит реализовать IApiOutputCache для сохранения на диск:

    https://github.com/Iamcerba/AspNetCore.CacheOutput#server-side-caching

Хотя этот вопрос касается кэширования в .Net Core с использованием локальной файловой системы, это также может быть выполнено с использованием локального экземпляра Sqlite на каждом узле сервера, а затем с помощью настройки EasyCaching для кэширования ответов и указания его на экземпляр Sqlite. на локальном хосте.

Надеюсь, это поможет кому-то еще, кто окажется в этом сценарии!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...