Есть ли способ приостановить истечение срока действия MemoryCache на определенный период времени?

Я использую класс .NET MemoryCache для кэширования данных в моем приложении. В большинстве случаев использования приложения политики кеширования с абсолютным и / или скользящим сроком действия отлично подходят для моего приложения. Однако в определенные периоды времени приложение может запускать длительный процесс, который не обновляет данные приложения. Процесс обычно настолько долгий, что срок действия кеша истекает и во время этого процесса очищаются кэшированные данные, и именно тогда я действительно хочу, чтобы данные оставались в кеше. Есть ли способ временно приостановить истечение срока действия и / или очистку MemoryCache?

Я мог бы выбросить все свои элементы и изменить политику истечения срока один за другим, но я боюсь, что, учитывая, что у меня есть сотни тысяч, если не миллионы, элементов в кеше, они не будут работать с перспектива производительности.

Можно было бы поместить элемент обратно в кеш в CacheEntryRemovedCallback, но похоже, что вы боретесь с системой, а не работаете с ней, и это не будет потокобезопасным.

Любые идеи были бы хорошы.


person afeygin    schedule 13.10.2014    source источник
comment
На самом деле это довольно широко. Без определенного кода все, что можно было бы предложить, - это очень общие рекомендации по использованию кеша; например, не пытайтесь «заставить» его держаться за такие вещи, и если у вас так много хранится в нем, рассмотрите другую стратегию.   -  person Andrew Barber    schedule 14.10.2014
comment
Какую альтернативную стратегию вы бы предложили? Как я уже сказал, MemoryCache неплохо удерживает большое количество элементов, которые мне нужны, и работает как шарм в 95% моих случаев использования.   -  person afeygin    schedule 14.10.2014
comment
Что ж, вы, вероятно, уже довели его до предела. Это кеш; не постоянное хранилище памяти. Вам действительно понадобится гораздо более конкретный вопрос, основанный на каком-то конкретном коде. На самом деле невозможно дать вам полезный общий совет по этому поводу.   -  person Andrew Barber    schedule 14.10.2014
comment
Мой вопрос заключался в том, может ли MemoryCache или какой-либо альтернативный кеш .Net обрабатывать мой вариант использования? Мне не нужно постоянное хранилище памяти: это быстро приведет к тому, что моему приложению не хватит памяти - мне нужен кеш, который удаляется на основе определенных политик. Я просто хочу, чтобы мои политики были более динамичными в зависимости от режима, в котором находится приложение ...   -  person afeygin    schedule 14.10.2014


Ответы (1)


Memcached или NCache - это системы кэширования плоской памяти, которые аналогичным образом поддерживают истечение срока действия. Это ваш поставщик данных / кеша Lib, который должен обладать интеллектом, чтобы повторно заполнить его по истечении срока действия.

Вы можете использовать политику InfiniteAbsoluteExpiration для MemoryCache, но она будет у нее навсегда. Или напишите свою собственную библиотеку кеширования. MemoryCache использует таймеры для проверки срока действия. Вы можете использовать свою известную версию, которая сделает это за вас с помощью расширенной логики.

Ваш объект расширения настраиваемой политики должен иметь делегата для подписки на событие процесса приложения для истечения срока действия элементов.

Удачи -Срини

person srini    schedule 09.01.2015