Подтвердить что ты не робот

.NET Кэширование - как работает Sliding Expiration?

Если я использую ObjectCache и добавляю такой элемент:

ObjectCache cache = MemoryCache.Default;
string o = "mydata";
cache.Add("mykey", o, DateTime.Now.AddDays(1));

Я понимаю, что объект истечет через 1 день. Но если к объекту обращаются 1/2 через день, используя:

object mystuff = cache["mykey"];

Есть ли этот reset таймер, так что теперь он через 1 день с момента последнего доступа к записи с ключом "mykey", или он все еще 1/2 в день до истечения срока действия?

Если ответ отрицательный, и есть способ сделать это, я хотел бы знать.

Спасибо.

4b9b3361

Ответ 1

Существует два типа политик кэша, которые вы можете использовать:

CacheItemPolicy.AbsoluteExpiration истекает через заданное количество времени.

CacheItemPolicy.SlidingExpiration истечет, если он не был доступен за определенное время.

Перегрузка ObjectCache Add(), которую вы используете, рассматривает ее как абсолютное истечение, а это означает, что она истечет через 1 день, независимо от того, сколько раз вы обращаетесь к ней. Вам понадобится использовать одну из других перегрузок. Здесь, как вы установили скользящее окончание (это немного сложнее):

CacheItem item = cache.GetCacheItem("item");

if (item == null) {

    CacheItemPolicy policy = new CacheItemPolicy {
        SlidingExpiration = TimeSpan.FromDays(1)
    }

    item = new CacheItem("item", someData);

    cache.Set(item, policy);
}

Вы меняете TimeSpan на нужное время кэширования.

Ответ 2

Значение свойства SlidingExpiration устанавливается с использованием атрибута slideExpiration элемента конфигурации. По истечении срока действия сбрасывается время истечения срока действия для действительного файла cookie для проверки подлинности, если запрос сделан, и прошло более половины интервала таймаута. Если файл cookie истекает, пользователь должен повторно аутентифицироваться. Установка свойства SlidingExpiration в значение false может повысить безопасность приложения, ограничив время, в течение которого cookie проверки подлинности действителен, на основе настроенного значения таймаута. Мы рекомендуем, чтобы, если вы настроили requireSSL как false, вы также настроите slideExpiration как false, чтобы уменьшить время, в течение которого действительный билет.