技术开发 频道

理解缓存

    下面我们看看缓存的其他几个不那么重要的方面:

    缓存的生命周期内的活动

    永久不过期,永久不变更的内容,这类东西就不应该放在缓存。缓存是临时的存储,而不是永久的,所以缓存的生命周期是有限的。

    它依次可能会经历如下活动:

    1.进入缓存。(进入缓存的时候,可能需要指定它以后的过期策略,如果不指定,需要使用系统默认的过期策略)
    2.从缓存中获得它,注意,这时候需要处理线程安全的问题。
    3.更新缓存,注意,也需要考虑线程安全问题
    4.离开缓存,这个可能是外部请求,也可能是缓存根据过期策略把它清理掉。

    缓存的过期策略

    一般我会问,你所接触的缓存中,碰到过那些缓存过期策略?

    最常见的几种过期策略如下:

    多长时间没有被请求,则过期,最典型的就是ASP和ASP.net 提供的 Section 功能。其实它就是一个缓存。

    依赖于文件变更的缓存,一旦文件被修改,缓存则过期,典型的是 WEB站点的 Web.config ,一旦这个文件变更,不但缓存重起,IIS进程也会进行一次释放工作。

    在此基础上,可能看到很多依赖关系的缓存过期策略。比如依赖于数据库的缓存过期策略。

    当然,业务逻辑里可能会有更复杂的过期策略,必须CSDN新版积分制论坛中,帖子列表缓存会在列表数据缓存达到600时,把它清理到550条数据。

    又比如新积分制论坛帖子的缓存过期,则是没有任何列表引用这个帖子后,则这个帖子过期。

    缓存的同步问题

    使用缓存,则意味着同样的数据,可能有多份并存。如果你的代码没有考虑某种情况,导致了这两份数据不一致了。这时候就会有问题发生。

    解决方法很简单,把你的业务逻辑,代码触发情况都考虑清楚,不要遗留没有触底的地方。

    简单的方法会导致你的代码逻辑变得非常复杂。

    这也就是有些人,在非必要的时候,建议你不要用缓存的原因。一旦开始使用缓存,你就应该准备增加大量的代码来处理数据同步的问题。

    初始化填充缓存数据

   
有时候在缓存被初始化后,还需要预先填充一些数据到缓存中。这就是缓存数据的初始化操作。

    缓存数据的初始化操作需要考虑以下问题:

    1.需要多长时间进行初始化,一般如果是站点的话,我们可能在 Global.asa 的 Application_OnStart 中处理这个初始化工作。初始化的一般不能太久,这时候就是考验我们代码优化的能力了。
    2.初始化的时候,一般是批量导入数据,而不是我们正常使用的时候,一次处理一个数据。

    总结:

     本文介绍了我对缓存的一些观点,而没有深入涉及到具体的缓存技术。希望通过本文的讲述,让只会缓存用法不懂缓存思想的人有初步的了解。
0
相关文章