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

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

Например, в приведенной ниже конфигурации время ожидания элементов истекает через 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 (совместно).


person Dave New    schedule 27.10.2014    source источник


Ответы (1)


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

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

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

person stuartd    schedule 03.11.2014