Discuz:开启页面缓存为MYSQL减负
Discuz! 6.0|Discuz! 6.0安装|Discuz! 6.0使用|Discuz! 6.0风格模板|Discuz! 6.0插件|Discuz! 6.0升级|Discuz! 6.0开发|Discuz! 6.0 FAQ |
在整体的论坛运行过程中,数据库服务器 MySQL 的压力是最大的,不仅占用很多的内存和 cpu 资源,而且占用着大部分的磁盘 io 资源,连 PHP 的官方都在声称,说 PHP 脚本 80% 的时间都在等待 MySQL 查询返回的结果。由此可见,提高论坛的负载能力,降低 MySQL 的资源消耗迫在眉睫。当然,Discuz!也已经早注意到这点,页面缓存就是其中的一个方面。下面就详细说明一下 Discuz! 的页面缓存功能是怎样降低MySQL的资源消耗的。
大家都知道,降低 MySQL 的资源消耗的方法除了使用高效率的 SQL 语句之外(当然,这一点 Discuz! 在每一个发布版本中都已经仔细研究了,所以每一句 SQL 都是很优化的),更直接的方法就是不去查询数据库。经过我们长期的分析发现,在网站实际运行过程中,网站论坛用户主要浏览的是每个主题帖子的详细页面,而这其中访问者的身份又以游客居多。根据这个规律,从 Discuz!5.5 开始,更改了以前版本的主题缓存机制,将游客访问的页面通过静态的 html 文件缓存起来,下一个游客在访问同一个主题时,直接调用缓存内容,而不用去再次查询数据库,这样可以有效的减轻数据库服务器的压力。同时首页我们也按照游客缓存的方法进行了纯静态化 html 页面的缓存。
那么缓存是怎么生成、保存在哪和怎么更新呢?首先主题缓存是在游客第一次访问某帖子时,如果该论坛开启了主题缓存功能,那么会估算该帖子被访问的频度,然后跟你设置的主题缓存系数比较,将帖子内容缓存到磁盘,在下一个游客来看时,直接读取出来。对于首页的话,直接就是游客第一次访问的时候,将页面静态化存储起来。其次,页面缓存保存问题。缓存会产生大量的文件,我们将其分散成三层目录,避免单个目录底下文件过多影响系统速度。每个目录可以存放 400w 个帖子主题,足已应付绝大部分大型论坛的需求。这里需要说明的一点,首页我们是当作 tid 等于 0 的帖子进行缓存。最后是缓存的更新。对于每个缓存,我们都有特定的缓存时间,而且是可以独立进行设置,站长可以根据自己站点的特点来灵活定义。
Discuz! 页面缓存的结构就是这样的,那究竟是在哪里设置的呢?进入到 Discuz! 论坛的管理后台,点击基本设置—>页面缓存设置,就可以看到如图1的界面
对照我上面的介绍,大家看到这个图之后实际操作一下就很明了了。赶紧动手设置一下吧。
至于开启主题缓存的效果吧,大家在自己的论坛上开启之后,看看页面下方的查询时间的变化就知道了!对了,顺便提醒大家一句,如果你的论坛访问人数很少,帖子也不多,开启页面缓存就没多大必要了,包括虚拟主机用户,那个是拿空间和准确性换效率的问题。