【Discuz缓存机制】实现Discuz缓存机制的实时更新与自动刷新

本文为我(7u5/陈秋武)原创,欢迎转载,请保留此行或注明出处。本文以Discuz7.2版本为基础。
Discuz模板机制在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,在加载之前进行文本更新判断。

转载于:https://www.cnblogs.com/huixingwo/articles/3557703.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值