gpt4 book ai didi

c# - MemoryCache - AbsoluteExpiration - 项目不会在更新后过期*

转载 作者:太空宇宙 更新时间:2023-11-03 20:07:11 26 4
gpt4 key购买 nike

下面是缓存用户无效登录尝试的代码。使用“绝对过期”缓存策略将项目添加到缓存中。

如果我只添加一项 - 它会在 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 下更新缓存项有关

关于我在这里遗漏了什么以及如何解决这个问题有什么想法吗?

最佳答案

ILSpy 揭示:

invalidLoginCache[cacheKey] = invalidLogin;

相当于:

invalidLoginCache.Set(
cacheKey, invalidLogin,
ObjectCache.InfiniteAbsoluteExpiration, null);

这能解释您所看到的吗?

你为什么不调用 Set,传递一个明确的策略?

关于c# - MemoryCache - AbsoluteExpiration - 项目不会在更新后过期*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22460750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com