码迷,mamicode.com
首页 > 其他好文 > 详细

如何保持缓存的一致性

时间:2014-08-12 21:29:44      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:io   strong   数据   ar   问题   new   数据库   app   

一:系统中对谁进行了缓存

在当前的系统中,在全部的 控制器 中,涉及到了用户,会存在一个 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:考试前

以上两者,在监考模块,添加功能,构建缓存,一旦构建缓存,得到该考试的全部人员,然后将人员的缓存建立起来。

如何保持缓存的一致性,布布扣,bubuko.com

如何保持缓存的一致性

标签:io   strong   数据   ar   问题   new   数据库   app   

原文地址:http://www.cnblogs.com/luminji/p/3908094.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!