互联网服务 2014 年 6 月 4 日

用Typecho Redis Cache来为Typecho提供全站超高速缓存

这篇文章介绍了如何使用Redis缓存来加速Typecho博客。作者在参考了一篇WordPress缓存的文章之后,编写了适用于Typecho的Redis缓存插件,并将其代码上传至Github。在部署之前,需要确保服务器满足一定的条件,如安装了PHP、Redis以及Apache或Nginx服务器等。接着,文章给出了具体的部署步骤,包括下载Credis库、重命名Typecho根目录中的index.php文件、根据服务器配置Typecho Redis Cache的参数等。最终,Typecho根目录中应该只有一个名为index.php的文件。
前几天在免费资源部落上看到一篇文章用Redis缓存来给WordPress站点加速-适用于Apache和Nginx。正好我用的Typecho博客没有相应的缓存插件,于是决定写一个Typecho的Redis缓存。
经过一下午的折腾之后,Typecho的Redis缓存前端终于完成了,代码托管在github,压缩包下载:Typecho Redis Cache

部署Typecho Redis Cache

部署条件

在将部署Typecho Redis Cache之前,请确定服务器满足以下几个条件:
  • PHP >= 5.3
  • Redis
  • Apache或Nginx服务器
  • Typecho

部署步骤

  1. Typecho Redis Cache使用 Credis 库作为Redis的php客户端,点此下载 。解压后将 Credis 目录上传到 Typecho 根目录;
  2. 将Typecho根目录的index.php文件重命名为index_origin.php
  3. 根据服务器配置Typecho Redis Cache index.php文件的redis_hostredis_portuserkey三个参数,然后将index.php上传到Typecho根目录。
/** redis connection parameters */
$redis_host = '127.2.172.129';
$redis_port = '15001';
/** the key used to purge cache */
$userkey = 'abc123';
最后的Typecho根目录看起来应该是这样子的:
├── index.php             Typecho Redis Cache 前端脚本         
├── index_origin.php  Typecho 原来的index.php
├── Credis                    Credis 库(**注意是大写**)
    ├── Client.php         Credis 库文件
    ├── other files
├── Typecho其它文件夹和文件
这时候访问网页应该可以看到效果了,为了方便调试,网址后面最后加上?debug=true参数,这样就可以在网页源代码看到调试信息。

缓存管理

Redis的缓存是不会自己清除的,需要用户手工清理。清理时,只要在打开的任意一个网页上加上userkeyaction参数就可以了。userkeyindex.php文件配置,action可以是purgepagepurgeall
注意: 清除缓存的结果调试信息在页面的头部,其它调试信息在页面的尾部。调试信息为html注释,需要查看网页源代码才能看到。

非缓存页面

以下类型的页面不会建立缓存:
  • /admin/ 目录下的所有页面
  • 搜索结果页面
  • 404页面
  • sitemap.xml

缓存效果测试

页面生成时间测试

  • 没有加载缓存时,首页的生成时间为0.2秒(Typecho的轻巧果然名不虚传!):
822433884.png
822433884.png
  • 使用Redis缓存时,首页的生成时间为0.001秒,整整快了200倍啊!
2321680259.png
2321680259.png
可以点击下面的链接自行测试,打开网页后查看源代码就可以看到页面生成时间等调试信息了。

并发性能测试

0.2秒和0.001秒的差别是看不出任何效果的。但是随着并发访问量加大,多个php页面的执行将造成服务器CPU、内存等资源的大量消耗,从而使页面执行时间加长,网页加载速度明显变慢;而使用了Redis缓存之后,服务器只是从缓存里取出数据,并不需要耗费太多资源,所以网页加载速度变化不大。
为了验证这个说法,我们使用loadimpact网站进行并发测试。
没有使用缓存时,页面的加载时间(蓝色线)随着访问量的上升明显增加,到50个并发的时候访问时间打开一个网页需要接近10秒; 745831596.png
使用Redis开启全站缓存后,页面的加载时间稳定在1~2秒,访问量的上升并没有导致网页加载变慢。Redis缓存对网站并发能力的提升效果非常显著。 3023991238.png

参考资料