您现在的位置是:首页 > cms教程 > Discuz教程Discuz教程
discuz缓存机制介绍
卫耿羿2025-06-27Discuz教程已有人查阅
导读Discuz的缓存同样分了主动缓存和被动缓存。从功能上来说,主动缓存一般用到管理员对全站的设置,等等需要手动更新的地方,这些地方的数据都有一个特点
Discuz的缓存同样分了主动缓存和被动缓存。从功能上来说,主动缓存一般用到管理员对全站的设置,等等需要手动更新的地方,这些地方的数据都有一个特点,那就是它们的更新可能性很小,平时不需要自动更新;Discuz!的被动缓存,一般分布在诸如帖子内容显示,用户信息更新这些地方,这些地方的更新基本上都是因为用户使用了某一特定的功能时所激发的。
在正常运行的Discuz!系统文件夹里面会有一个forumdata文件夹,这个是论坛记录和缓存文件的存放目录,一般这些文件都是自动生成的,在forumdata/cache/里面存储的都是一些Discuz!的基本设置和一些常使用的值,这些值一般在系统初始化的时候就保存在$_DCACHE全局变量中,在后面的操作中将可以简单地使用它们进行功能上的判断。
(1)主动缓存,也就是只在用户操作后台时,由Discuz!系统去删除原有缓存进行更新的缓存。它们普遍存在于forumdata/cache/目录中,比如说/forumdata/cache/cache_settings.php保存了整个系统的核心设置,一般情况是不会更新的,只有后台修改了比如站点名称等关键信息的时候才会去主动更新这个缓存文件。还有用于保存用户组和管理员组相关信息的两类缓存文件:
(2)被动缓存,也就是缓存的生成并非是由用户手动更新的,而是在系统里判断是否需要生成缓存,需要缓存多长时间,由系统自身来完成整个过程。很典型的代表有帖子内容的缓存生成过程。帖子内容的缓存路径被cache_setting.php里定义为一个可以由用户修改的值,默认是在forumdata/threadcaches下,由viewthread.php里的逻辑可以看到,当满足使用缓存条件的时候(一般情况是第一页的内容),系统会执行viewthread_loadcache函数,此函数会判断缓存是否过期,如果不过期就执行函数中间读取缓存的操作,之后Discuz!直接巧妙地在函数中die出一段javaScript,结束访问。专研Discuz!代码的你可能会很疑惑,究竟是什么时候生成的缓存呢?include文件夹里有一个global.func.php,这个文件包括了整个Discuz!系统使用到的全局方法,其中有一个叫output的函数,在函数里判断了是否可以缓存当前的页面,并且使用ob_get_contents函数直接缓存页面。
提示:ob_start()在服务器打开一个缓冲区来保存所有的输出。所以在任何时候使用echo,输出都将被加入缓冲区中,直到程序运行结束或者使用ob_flush()来结束。然后在服务器中缓冲区的内容才会发送到浏览器,由浏览器来解析显示。函数ob_end_clean会清除缓冲区的内容,并将缓冲区关闭,但不会输出内容。此时得用一个函数ob_get_contents()在ob_end_clean()前面来获得缓冲区的内容。这样的话,能将在执行ob_end_clean()前把内容保存到一个变量中,然后在ob_end_clean()后面对这个变量做操作。
在正常运行的Discuz!系统文件夹里面会有一个forumdata文件夹,这个是论坛记录和缓存文件的存放目录,一般这些文件都是自动生成的,在forumdata/cache/里面存储的都是一些Discuz!的基本设置和一些常使用的值,这些值一般在系统初始化的时候就保存在$_DCACHE全局变量中,在后面的操作中将可以简单地使用它们进行功能上的判断。
(1)主动缓存,也就是只在用户操作后台时,由Discuz!系统去删除原有缓存进行更新的缓存。它们普遍存在于forumdata/cache/目录中,比如说/forumdata/cache/cache_settings.php保存了整个系统的核心设置,一般情况是不会更新的,只有后台修改了比如站点名称等关键信息的时候才会去主动更新这个缓存文件。还有用于保存用户组和管理员组相关信息的两类缓存文件:
/forumdata/cache/usergroup_’.intval($groupid).’.php
/forumdata/cache/admingroup_’.intval($adminid).’.php
另外还有在index、forumdisplay、viewthread、post、blog、topicadmin、register、archiver几个模块中的时候分别会使用的cache_’模块名‘.php的缓存。在include/common.inc.php中的流程可以看到,这些类似的主动缓存都有一个特点:统一进行引用(include),之后进行失败检测,之后再对失败的缓存(比如说文件丢失或者是上次更新还没生成这样的情况下)统一进行重新生成的操作,具体的生成方法见/include/cache.func.php中的updatecache函数。(2)被动缓存,也就是缓存的生成并非是由用户手动更新的,而是在系统里判断是否需要生成缓存,需要缓存多长时间,由系统自身来完成整个过程。很典型的代表有帖子内容的缓存生成过程。帖子内容的缓存路径被cache_setting.php里定义为一个可以由用户修改的值,默认是在forumdata/threadcaches下,由viewthread.php里的逻辑可以看到,当满足使用缓存条件的时候(一般情况是第一页的内容),系统会执行viewthread_loadcache函数,此函数会判断缓存是否过期,如果不过期就执行函数中间读取缓存的操作,之后Discuz!直接巧妙地在函数中die出一段javaScript,结束访问。专研Discuz!代码的你可能会很疑惑,究竟是什么时候生成的缓存呢?include文件夹里有一个global.func.php,这个文件包括了整个Discuz!系统使用到的全局方法,其中有一个叫output的函数,在函数里判断了是否可以缓存当前的页面,并且使用ob_get_contents函数直接缓存页面。
提示:ob_start()在服务器打开一个缓冲区来保存所有的输出。所以在任何时候使用echo,输出都将被加入缓冲区中,直到程序运行结束或者使用ob_flush()来结束。然后在服务器中缓冲区的内容才会发送到浏览器,由浏览器来解析显示。函数ob_end_clean会清除缓冲区的内容,并将缓冲区关闭,但不会输出内容。此时得用一个函数ob_get_contents()在ob_end_clean()前面来获得缓冲区的内容。这样的话,能将在执行ob_end_clean()前把内容保存到一个变量中,然后在ob_end_clean()后面对这个变量做操作。
本文标签:
很赞哦! ()
上一篇:Discuz的NT代码阅读分析
图文教程
Discuz!NT在64位Windows下运行常见问题
非常搞,等了快一年Discuz!NT的免费版本依旧不支持64位Windows。官方出了64位windows支持的指南居然是叫用户把IIS设置为32位兼容模式。说了等于没说
Discuz的NT邮件插件机制分析
大约还是去年12月份,当时项目中遇到了一个很棘手的问题,就是管理员(或站长)在后台设置了邮箱信息之后,使用注册邮件发送激活验证码时,总有用户反映不能收到激活信息的邮件。
认识修改Discuz程序文件功能说明
先从根目录开始,根目录文件一般都是入口,即执行具体功能的代码一般不在这些文件中,而是在其调用的文件中admin.php 系统站点管理入口文件api.php Discuz!合作应用入口文件(例如漫游、支付宝什么的都走这里)
Discuz代码大全
1.[ u]文字:在文字的位置可以任意加入您需要的字符,显示为下划线效果。2.[ align=center]文字:在文字的位置可以任意加入您需要的字符,center位置center表示居中,left表示居左,right表示居右。
相关源码
-
(自适应)文案文档作文写作word资源网站模板下载本模板基于PbootCMS系统深度开发,针对电影解说、文案分享类网站的特殊需求设计。采用响应式布局技术,确保在手机端和桌面端都能呈现专业的内容展示效果,帮助运营者高效管理影视解说资源。查看源码 -
(自适应响应式)家电维修清晰服务网站pbootcms模板免费下载本模板基于PbootCMS内核开发,为维修服务类企业打造,特别适合家电维修、设备维护等行业使用。通过简洁直观的界面设计,帮助企业快速搭建专业级服务平台,实现线上业务高效管理。查看源码 -
帝国cms7.5文库范文/付费下载/复制付费/带支付源码免费下载本模板为文库、文档分享、知识付费类平台设计,提供完整的内容变现解决方案。系统支持多种内容展示与付费模式,满足不同场景下的内容价值转化需求,帮助平台实现内容资源的有效管理和商业化运营。查看源码 -
(自适应)绿色宠物门诊兽医行业网站模板该绿色清爽风格网站模板专为宠物门诊与兽医诊所设计,基于PbootCMS内核开发,采用响应式布局确保手机、PC等多端体验一致,帮助宠物医疗机构高效构建线上服务平台。查看源码 -
(自适应)蓝色厨卫厨房水龙头阀门水槽设备源码下载基于PbootCMS内核开发,深度适配厨卫设备行业特性。通过精准的产品展示模块与水效标识专区设计,有效呈现五金件工艺细节。响应式布局确保从手机到平板都能展示金属质感与水流动态效果。查看源码 -
(自适应)英文电子芯片电子元件网站pbootcms模板下载基于PbootCMS内核开发的电子元件类企业专用模板,采用响应式设计技术,适配电子元器件、集成电路、半导体等行业的品牌展示与技术文档发布需求。前端布局针对芯片参数表格与产品规格书展示进行深度优化。查看源码
| 分享笔记 (共有 篇笔记) |
