Локальный кеш и неизменяемые объекты - нулевой тайм-аут

При использовании аннулирования на основе уведомлений в локальном кэшеttlValue тайм-аут все равно сделает недействительными элементы кэша и, таким образом, вызовет выборку из кластера кэша при следующем запросе.

Например, в приведенной ниже конфигурации время ожидания элементов истечет через 300 секунд, но также будет проверяться на наличие уведомлений о недействительности в кластере каждые 60 секунд (например, если они были удалены):

<dataCacheClient name="default">
  <localCache isEnabled="true" sync="NotificationBased" objectCount="100000" ttlValue="300" />
  <clientNotification pollInterval="60" />
</dataCacheClient>

Проблема:

У меня есть набор объектов, которые неизменны - то есть они не меняются. Это означает, что им никогда не понадобится аннулирование на основе тайм-аута, чтобы "обновить" себя.

По сути это означает, что неизменяемые объекты будут излишне удалены из локального кэша. Если этих элементов много, потенциально может произойти заметное снижение производительности, особенно когда нужно прочитать тысячи элементов.

При установке на ноль в DataCacheLocalCacheProperties конструктор, я получаю следующее исключение:

An exception of type 'System.ArgumentException' occurred in Microsoft.ApplicationServer.Caching.Client.dll but was not handled in user code

Additional information: Time-out should be a positive value.

Другой вариант, я должен установить недоступный номер.

Почему нам не разрешено иметь локальный кэш с нулевым тайм-аутом?

Я использую Azure In-Role Caching (colocated).

1 ответ

Решение

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

Тогда ваш вопрос действительно "почему используется ноль в качестве ttlValue не используется в качестве особого случая, чтобы указать, что элементы никогда не должны быть признаны недействительными?", на который может ответить только Microsoft.

Если вы установите ttlValue в int.MaxValue, то предметы не будут недействительными в течение 68 лет, что должно быть достаточно долго.

Другие вопросы по тегам