在我的项目中,我使用单例模式实现了一些缓存值 - 它看起来像这样:
Roles GetRoles
{
get{
var cached = HttpContext.Current.Cache["key"];
if(cached == null){
cached = new GetRolesFromDb(...);
}
return cached as Roles;
}
}
当我更改角色时,我清除缓存(迭代所有键)。 我认为它不是线程安全的 - 如果某些请求尝试获取缓存的角色, 缓存!= null并且同时缓存已被清除GetRoles返回null。
答案 0 :(得分:1)
private object lockRoles = new object();
public Roles GetRoles
{
get
{
object cached = HttpContext.Current.Cache["key"];
if(cached == null)
{
lock(lockRoles)
{
cached = HttpContext.Current.Cache["key"];
if (cached == null)
{
cached = new GetRolesFromDb(...);
HttpContext.Current.Cache["key"] = cached;
}
}
}
return (Roles)cached;
}
}
public void ClearRoles()
{
HttpContext.Current.Cache.Remove("key");
}