Microsoft Enterprise Library — истечение срока действия механизма кэширования

Доброе утро

Я пытаюсь интегрировать механизм кэширования в свой текущий проект и хотел спросить о передовом опыте и вопросах, которые у меня есть.

Мой web.config определяется следующим образом:

<configSections>
    <section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections>


<cachingConfiguration defaultCacheManager="SomeName">
    <cacheManagers>
        <add expirationPollFrequencyInSeconds="600" maximumElementsInCacheBeforeScavenging="1000" numberToRemoveWhenScavenging="10" backingStoreName="Null Storage" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="SomeName" />
    </cacheManagers>
    <backingStores>
        <add encryptionProviderName="" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="Null Storage" />
    </backingStores>
</cachingConfiguration>

Когда я добавляю что-то в кеш, я использую следующий код:

ICacheManager manager = CacheFactory.GetCacheManager("SomeName");
if (manager.GetData(key) != null && IsCacheEnable)
{
    specialChars = (Hashtable)manager.GetData(key);
}

else
{
    manager.Add(key, specialChars, CacheItemPriority.Normal, null, new SlidingTime(new TimeSpan(0, 0, CacheExpirySecond)));
}

Из документации я вижу, что элементы, помещенные в кеш методом Add(string key, object value), не имеют срока действия. Однако я вижу, что метод Add(string key, object value, CacheItemPriority scavengingPriority, ICacheItemRefreshAction refreshAction, params ICacheItemExpiration[] expirations) определяет временной интервал, указывающий, когда истечет срок действия кеша.

Мой вопрос: зачем нам определять свойство expirationPollFrequencyInSeconds в файле web.config, когда нам нужно будет снова определить временной интервал при добавлении элементов в кеш с помощью второго метода Add? Я что-то упускаю? Спасибо


person Ashish    schedule 30.05.2013    source источник


Ответы (1)


Поправьте меня если я ошибаюсь.

ICacheItemExpiration (в нашем случае), который мы указываем в методе Add(), фактически определяет политику истечения срока действия, которая будет применяться к этому элементу, добавляемому в кеш. В нашем случае мы используем политику истечения срока действия SlidingTime. Предположим, мы установили SlidingTime на 10 секунд. Подразумевается, что элемент будет помечен как просроченный, если к нему не будут обращаться непрерывно в течение 10 секунд. Это полезно, когда нам нужно сохранить элемент активным, когда для этого элемента поступает несколько запросов. В качестве примечания у нас есть другая политика истечения срока действия, такая как AbsoluteTime, FileDependency, NeverExpire...

Нам нужно понимать, что когда срок действия элемента истек, он все еще присутствует в хеше до тех пор, пока фоновый планировщик не удалит этот элемент (в зависимости от его политики истечения срока действия, которую фоновый планировщик будет проверять на предмет истечения срока действия). При установке значения для expirationPollFrequencyInSeconds мы определяем временной интервал для выполнения фонового планировщика и анализа хэша для удаления элементов с истекшим сроком действия (в соответствии с политикой истечения срока действия, определенной для этого элемента).

person Ashish    schedule 01.08.2013