Как очистить MemoryCache в ASP.NET Core? - PullRequest
0 голосов
/ 26 мая 2019

Как правильно очистить IMemoryCache из ASP.NET Core?

Я считаю, что в этом классе отсутствует метод Clear, но как с этим бороться?В моем проекте я кэширую методы DocumentRepository в течение 24 часов, где я получаю много строк из базы данных.Но иногда я могу изменить базу данных, поэтому я хочу очистить IMemoryCache, поскольку он содержит мусорные данные.

1 Ответ

0 голосов
/ 26 мая 2019

Класс и интерфейс кэша не имеют никаких методов для очистки ни того, ни другого для перебора ключей, поскольку он не предназначен для использования в качестве списка, а в приложениях ASP.NET Core обычно используется интерфейс IDistributedCache в качестве зависимости, посколькуэто позже позволяет вам позднее перейти из локального кэша в распределенный (например, memd или Redis).

Вместо этого, если вы хотите аннулировать определенную строку, вы должны удалить кэшированную запись через cache.Remove(myKey).

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

Локально это может быть сделано с любой библиотекой pub / sub.В распределенных сценариях вы можете использовать функции публикации / вложенности распределенного кэша (т. Е. Redis).

В случае таблиц поиска (где затрагиваются многие значения), вы можете иметь службу обновления кэша (т. Е.каждые 5-10 минут с помощью фоновой задачи с использованием библиотеки расписаний, такой как hangfire или quart.net).

Вопросы по домашней работе

Но один вопрос, который вы должны задать себе: действительно ли полезно кэшировать документы в течение 24 часов, если они часто меняются?

Загружается ли загрузкаОдин документ занимает столько времени, что его кеширование будет стоить 24 часа?Или более короткие времена достаточно хороши (15, 30, 60 минут)?

...