2016-05-02 2 views
-3

Я использую класс NET MemoryCache для целей кэширования.Может ли MemoryCache обслуживать истекший элемент до получения новых данных?

У меня есть следующие требования:

  1. Expire запись кэша после «х» количество времени, но не выселять его.
  2. Если запрос приходит для записи в кэш после этого «х» времени, попробуйте извлечь новые данные.
    • Однако, если извлечение новых данных завершается с ошибкой, используйте элемент с истекшим кешем (который все еще находится в кеше, поскольку он не был выведен).
    • Если выборка новых данных завершается успешно, обновите элемент в кеше и сбросьте его таймер истечения.

Возможно ли это с помощью MemoryCache?

+2

ДА, если вы пишете несколько строк кода ... любой другой вопрос? – Eser

ответ

1

Возможно ли это использование MemoryCache?

Нет, я боюсь, что класс MemoryCache, встроенный в инфраструктуру, не предлагает функциональность, которую вы ищете. Возможно, вам придется реализовать его самостоятельно. Класс MemoryCache предлагает вам функциональность, в которой при истечении срока действия элемента должно быть x количество времени по сравнению с текущим временем, после этого x количество времени, в течение которого вы не сможете получить кеш-объект, потому что он будет выселен и если вы попытаетесь получить элемент до этого x времени, которое может быть успешным или нет: этот элемент все равно может быть выселен из кеша, если ваше приложение потребляет много памяти, например.

Итак, нижняя строка такова: если вы разместили какой-то элемент в MemoryCache, то нет абсолютно никакой гарантии, что вы сможете найти этот элемент внутри MemoryCache на более позднем этапе. И, кстати, это весь смысл кеша: вы должны хранить только данные данных внутри этого типа кеша, которые у вас есть другие способы получения, если они недоступны внутри этого кеша. Обычно эти другие средства для извлечения данных состоят в создании немного более дорогой базы данных или удаленных вызовов HTTP.

+0

Да, спасибо за подтверждение. Просто хотелось быть уверенным, что если что-то подобное легко сделать с использованием памяти или нет, прежде чем начать с реализации. – user1500970

+0

Нет, я боюсь, что то, что вы ищете, не предлагается из коробки из класса MemoryCache, встроенного в фреймворк, и вам может потребоваться его реализовать самостоятельно. –

Смежные вопросы