静态缓存和动态缓存

今天有个朋友问我什么叫动态缓存。N年前曾经看过一篇文章,不记得叫什么了。只记得静态缓存是在写了文章过后,就生成静态页面。动态缓存是写了文章以后不生成静态页面,当有用户第一次浏览以后,才触发相关条件生成静态页面。

我朋友又问?那不是动态缓存需要更加多的判断和操作?其实是错的。动态缓存要比静态缓存先进多,至少在我看来是这样。目前绝大多数WEB程序生成静态页面,都是采用静态生成。这就是我一直不做静态缓存(生成)的原因——麻烦。

因为静态缓存,有比较严重的缺点——数据即时性。如果要保证静态页面的某些数据的即时性,也可以说同步更新,就必须执行大量操作,统计,重新写入。或者是改变内容后,还要重新生成。如果不注重即时性,那也要定期重新更新所有静态文件。因此,在后台和前台都必须要有代码来执行更新和写文件的操作。

我说动态缓存就比静态缓存,先进就先进在生成是触发式的,这样可以让后台部分少去了很多操作。比如写完文章后,不生成静态页面,有用户第一次访问时,检查是否有缓存过的记录或者缓存文件是否存在。没有,就生成,这次操作稍微慢点,然后记录一下,第2个用户访问时,系统检查到有缓存的记录。就直接调用缓存文件。这次的速度就快了。对数据库的访问也就减少了。我们还可以给缓存设置一个有效期,当前台用户浏览时,可以触发是否更新。更新的话,这个用户浏览肯定会稍微慢点。但是第2个用户就又快了。又可以看到新内容了。后台干预的操作也大大减少了。当然,管理员可以有时间去喝咖啡了。


比如SABLOG-X要加入动态缓存的功能那我们就要多加几个字段来记录某些信息。

lastvisit 最后访问时间
cached 是否已经缓存 默认0

新文章,cached当然为0了。第一个用户访问,然后就开始生成文件,处理数据库的信息是个漫长的过程,可能也就0.00N秒吧。呵呵。生成完毕后,更新cached的值为1,然后跳转到/cachedir/datedir/articleid.html。

当第2个用户访问,查询到cached的值是1,就直接跳转或者调用/cachedir/datedir/articleid.html,就跳过了下面对数据库的操作。当然,之中可以加入缓存有效时限的判断操作,看看lastvisit和当前时间的间隔。这个间隔可以在后台设置,比如1天,2天……如果大了。就把缓存删除。再生成。如果小了。继续调用缓存文件或者跳转。反正用不了几毫秒。这一步也可以在后台批量操作。反正代码也简单。总之操作要比静态缓存简单得多。代码量肯定也要少得多。

这下就不用和朋友解释这么多了,说这么通俗。再笨都懂了。不知道有没有高手的思路或者方法更加好的。欢迎交流交流。




最近学习了不少东西,本来如果不预定51发布SABLOG-X的,就可以加入更加多的重大改进。但是为了不跳票。只能将就咯。我脸皮比较厚,敢说现在的SABLOG-X在国产BLOG中,也算排得比较靠前的了。哈哈。

BY angel

 

 

http://blog.sina.com.cn/s/blog_48edd404010003t7.html

posted @ 2014-12-05 14:54  fleam  阅读(1542)  评论(0编辑  收藏  举报