Да, никогда не проходите через кеш и не удаляйте элементы.Это даст вам мир боли (я прошел через это недавно).Поскольку вы получите сообщение об ошибке «коллекция была изменена, перечисление может не выполняться».
У меня также есть кэш для поиска, и я не устанавливаю срок действия - я вручную отменяю действие при необходимости.
Хитрость в том, что данные хранятся в «ведрах».Этот «сегмент» обычно является родительским идентификатором или, если вы хотите получить в терминах базы данных, внешним ключом.
Так что, если вам нужно очистить все «Заказы» для данного «Клиента», ключ кешадолжен быть CustomerId.В моем случае я кеширую ReadOnlyCollection<T>
.Поэтому мне не нужно зацикливаться, просто удалите его, а затем добавьте свежую копию.
Кроме того, чтобы быть вдвойне безопасным, я использую ReaderWriterLockSlim для аннулирования кэша.Когда я знаю, что он должен быть признан недействительным, я сначала вызываю базу данных, получаю блокировку записи, очищаю и обновляю соответствующий кэш, а затем закрываю блокировку записи.
Таким образом, все без проблем.