我在HttpContext.Cache中存储了一个整数值,设置了一个绝对过期时间,在当前时间的5分钟后过期。然而,在等待了6分钟后(或更长时间),整数值仍然存在于Cache中(即使绝对过期时间已经过去)。这是我正在使用的代码:
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。