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

В частности, есть ли способ в .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


person James K    schedule 14.04.2019    source источник
comment
Прочитайте это: stackoverflow.com/help/on-topic. Это может помочь вам понять, почему за вас проголосовали против, и почему за этот пост проголосовали близко. Этот пост не по теме, поскольку вы просите порекомендовать библиотеку. Кроме того, вы разместили это один раз, удалили его, а потом снова опубликовал, что раздражает.   -  person R. Richards    schedule 14.04.2019
comment
@R.Richards - Спасибо за объяснение. После многократного пересмотра вопроса он оказался достаточно разным, чтобы оправдать другой вопрос, но я определенно буду избегать этого в будущем. В конечном счете, я хотел бы использовать только .Net Core, и таким образом, чтобы функциональность была очень похожа на стандартную. На самом деле, вполне возможно, что они предоставляют эту функциональность только с флагом, который я не смог найти. Возможно, термин «библиотека» был неуместен. Спасибо, что обратили на это мое внимание.   -  person James K    schedule 15.04.2019


Ответы (2)


Я реализовал это. https://www.nuget.org/packages/AspNetCore.ResponseCaching.Extensions/ https://github.com/speige/AspNetCore.ResponseCaching.Extensions

Однако пока не поддерживает .net core 3.

person Devin Garner    schedule 25.09.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 на локальном хосте.

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

person Community    schedule 15.04.2019