一:系统中对谁进行了缓存
在当前的系统中,在全部的 控制器 中,涉及到了用户,会存在一个 User2.GetCurrentSession() 方法,如下:
public static User2 GetCurrentSession()
{
User2 user = RepRegistory
.Session[CookieWrapper.GetCookie(YHBJ.Model.MagicNumbers.SystemValues.CookieName, "Id")]
as User2;
if (user == null)
{
user = new User2()
{
// 从 cookie 构筑用户
};if (!string.IsNullOrEmpty(user.Id))
{
RepRegistory.Session[user.Id] = user;
}
}return user;
}
可以看到,以用户为最小单位,进行了缓存,同时,用户涉及到的全部信息也被缓存了,如,用户的专业。这样,问题就来了,比如:
系统中专业进行了修改,就需要同步更新所有用户的专业;
那么,实际上,为了简便期间,目前,就是把该用户的缓存整个进行清楚就可以了。重新构建缓存,在该用户登录的时候,会自动创建。
二:保持缓存的一致性具体做法
1:首先,从控制器入手,查看控制器方法中,涉及到修改、添加、删除的方法,如果是系统级别的数据,进行如上操作后,需要调用 User2.ClearSessionAll() 方法。
2:如果是对单个用户数据的修改、添加和删除,则需要分为两个情况来处理,
2.1 非 User2 入手的方法(即重构前的方法),需要调用 User2.ClearSession(userId) 来清除缓存;
2.2 如果控制调用的是 User2 的方法,则不需要进行任何处理,因为 User2 类型已经保证了内存和数据库中的数据是一致的;
三:什么时候该集中构建缓存
1:评审考试前
2:考试前
以上两者,在监考模块,添加功能,构建缓存,一旦构建缓存,得到该考试的全部人员,然后将人员的缓存建立起来。