.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 в день до истечения срока действия?
Если ответ отрицательный, и есть способ сделать это, я хотел бы знать.
Спасибо.
Ответы
Ответ 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, чтобы уменьшить время, в течение которого действительный билет.