下面是缓存用户进行的无效登录尝试的代码。正在使用“绝对过期”缓存策略将项目添加到缓存中。
如果我只添加一项 - 它会在 2 分钟内按预期过期。但是,如果我更新该缓存项目(没有明确指定缓存策略) - 该项目的保留时间远远超过 2 分钟。这是代码片段:
public class UserLogin
{
public string Username { get; set; }
public List<DateTime> InvalidLoginTimestamp { get; set; }
public bool IsLocked { get; set; }
}
private void AddInvalidLoginToCache(string cacheKey)
{
if (invalidLoginCache.Contains(cacheKey))
{
//Add invalid login to cache
UserLogin invalidLogin = (UserLogin)invalidLoginCache[cacheKey];
invalidLogin.InvalidLoginTimestamp.Add(DateTime.Now);
invalidLoginCache[cacheKey] = invalidLogin;
//Lock user account if invalid logins reach threshold
if (invalidLogin.InvalidLoginTimestamp.Count == 3)
{
invalidLogin.IsLocked = true;
invalidLoginCache.Set(cacheKey, invalidLogin, GetCachePolicyForLockOut());
}
}
else
{
invalidLoginCache.Add(cacheKey,
new UserLogin { Username = cacheKey, InvalidLoginTimestamp = new List<DateTime> { DateTime.Now } },
GetCachePolicyForInvalidLogin());
}
}
private CacheItemPolicy GetCachePolicyForInvalidLogin()
{
int keepInvalidLoginFor = 2; //minutes
CacheItemPolicy cachePolicyForInvalidLogin = new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(keepInvalidLoginFor) };
return cachePolicyForInvalidLogin;
}
似乎问题与我在 //Add invalid login to cache 下更新缓存项有关
关于我在这里缺少什么以及如何解决此问题的任何想法?