Dotnet Core In Memory Cache - срок действия по умолчанию - PullRequest
0 голосов
/ 05 октября 2018

Я использую MemoryCache в проекте C # Dotnet Core.Я использую его для хранения списка перечислений, которые я прочитал из коллекции (я хочу сохранить его, так как он использует отражение для загрузки перечислений, что требует времени).

Однако, поскольку моя коллекция несобираюсь измениться, я не хочу, чтобы срок его действия истек вообще.Как я могу это сделать?Если я не установлю срок действия (SlidingExpiration или Absolute Expiration), мой кэш никогда не истечет?

1 Ответ

0 голосов
/ 05 октября 2018

Если вы не укажете абсолютное и / или скользящее истечение срока действия, то элемент теоретически будет храниться в кэше неопределенно долго.В практическом плане постоянство зависит от двух факторов:

  1. Давление памяти.Если система ограничена в ресурсах, а запущенное приложение нуждается в дополнительной памяти, кэшированные элементы могут быть удалены из памяти для освобождения ОЗУ.Однако вы можете отключить это, установив приоритет кэша для записи на CacheItemPriority.NeverRemove.

  2. Кэш-память связана с процессом.Это означает, что если вы перезапустите сервер или ваше приложение перезапустится по какой-либо причине, все, что хранится в кеше памяти, исчезнет.Кроме того, это означает, что в сценариях веб-фермы каждый экземпляр вашего приложения будет иметь свой собственный кэш памяти, поскольку каждый из них является отдельным процессом (даже если вы просто запускаете несколько экземпляров на одном сервере).

Если вы заботитесь только о том, чтобы действительно выполнить операцию один раз и сохранить результат после завершения работы приложения и даже для нескольких экземпляров приложения, вам необходимо использовать распределенное кэширование с резервным хранилищем, таким как SQL Server или Redis.

...