最新消息:

Discuz如何实现数据缓存机制

CMS学习 李金龙 3038浏览 0评论

  我们大家都知道Discuz的模板缓存是非常不错的,Discuz7.2都是在config.inc.php中设置$tplrefresh为1即实现模板缓存的自动更新。
  但是最近想实现一下数据缓存机制的实现,用同样的原理方法却是实现不了了,因为数据源为数据库中数据时,cdb_caches中的dateline字段(缓存更新时间)如果每次取出作为判断标志,则会加大数据库的连接压力。
  落水鱼从网上找到了这个问题的解决办法,现在提出来给大家共享:
  (1)在原来缓存机制的基础上建立一个缓存名字段与dateline字段对应的缓存。如cache_dateline.php。
  (2)写一个getcache函数,每次加载缓存前,先载入cache_dateline.php,然后用cache_缓存名。php(如cache_7u5.php)的修改时间与cache_dataline.php缓存中的dateline值做对比。如果cache_dateline.php中的时间戳大于缓存文件cache_7u5.php的修改时间,则调用updatecache(’7u5’),否则直接加载cache_7u5.php。
  (3)这里就涉及到一个问题,及cache_dateline.php缓存的更新。我略微思索决定把这个步骤加入到updatecache的replace into段中,同时更新dateline缓存数据及cache_dateline.php,以便保证cache_dateline.php的缓存更新。
  总体实现完以后,就可以让Discuz彻底脱离手动更新缓存,而只稍微增加一点点小负载,即在使用前判断两者修改时间,判断前加载cache_dateline.php(因为只有缓存名和dateline字段,所以大小很小,顶多几十k)。
  这个项目实现,很适合于大负载的文本阅读站点中使用,因为纯静态化的空间复杂度过高,在移植维护时非常不便。
  (4)大文本内容缓存的更新在这种策略的基础上,结合目录切割,类似Ucenter用户的目录切割。000/00/00,在加载之前进行文本更新判断。
  希望这个Discuz的数据缓存机制能够帮助到大家,不过大家在修改之前一定要注意备份文件,以防万一!

转载请注明: » Discuz如何实现数据缓存机制

发表我的评论
取消评论

表情

网友最新评论 (3)

  1. 计划任务...
    郑旭9年前 (2011-02-12)
  2. 难怪很多DZ论坛添加一个链接要过一段时间才能看到。
    SEO优化9年前 (2011-02-14)
  3. 过来支持下了,呵呵。
    SEO博客9年前 (2011-02-14)