Я храню одно целочисленное значение в HttpContext.Cache с абсолютным временем истечения 5 минут. Однако после ожидания 6 минут (или дольше) целочисленное значение все еще находится в кэше (то есть оно никогда не удаляется, даже если истек абсолютный срок действия). Вот код, который я использую:
public void UpdateCountFor(string remoteIp)
{
// only returns true the first time its run
// after that the value is still in the Cache
// even after the absolute expiration has passed
// so after that this keeps returning false
if (HttpContext.Current.Cache[remoteIp] == null)
{
// nothing for this ip in the cache so add the ip as a key with a value of 1
var expireDate = DateTime.Now.AddMinutes(5);
// I also tried:
// var expireDate = DateTime.UtcNow.AddMinutes(5);
// and that did not work either.
HttpContext.Current.Cache.Insert(remoteIp, 1, null, expireDate, Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
}
else
{
// increment the existing value
HttpContext.Current.Cache[remoteIp] = ((int)HttpContext.Current.Cache[remoteIp]) + 1;
}
}
При первом запуске UpdateCountFor ("127.0.0.1") он вставляет 1 в кэш с ключом "127.0.0.1" и истекает через 5 минут, как и ожидалось. Каждый последующий запуск увеличивает значение в кэше. Однако после 10 минут ожидания он продолжает увеличивать значение в кэше. Значение никогда не истекает и никогда не удаляется из кэша. Почему это так?
Насколько я понимаю, абсолютное время истечения означает, что предмет будет удален приблизительно в это время. Я делаю что-то неправильно? Я что-то неправильно понимаю?
Я ожидаю, что значение будет удалено из кэша через 5 минут, однако оно будет оставаться там до тех пор, пока я не перестрою проект.
Это все работает в .NET 4.0 на моем локальном компьютере.