Expiração absoluta do cache do ASP.net não está funcionando
Estou armazenando um único valor inteiro no HttpContext.Cache com um tempo de expiração absoluto de 5 minutos a partir de agora. No entanto, após aguardar 6 minutos (ou mais), o valor inteiro ainda está no cache (ou seja, nunca é removido, mesmo que a expiração absoluta tenha passado). Aqui está o código que estou usando:
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;
}
}
A primeira vez que executo UpdateCountFor ("127.0.0.1"), ele insere 1 no cache com a chave "127.0.0.1" e uma expiração absoluta de 5 minutos a partir de agora, conforme o esperado. Cada execução subseqüente incrementa o valor no cache. No entanto, após aguardar 10 minutos, ele continua aumentando o valor no cache. O valor nunca expira e nunca é removido do cache. Por que é que
Entendo que um prazo de validade absoluto significa que o item será removido aproximadamente naquele momento. Estou fazendo algo errado? Estou entendendo algo errado?
Espero que o valor seja removido do cache após 5 minutos, mas ele permanece lá até eu reconstruir o projet
Tudo está sendo executado no .NET 4.0 na minha máquina loca