这篇文章是笔者看过数篇相关教程,自己折腾了几个小时写出来的经验总结,环境是centos下安装的宝塔面板,用的程序是wordpress,总所周知,wordpress的速度慢的惊人,相当吃CPU,听说用memcached以后,能大大提高访问速度,所以开始了折腾,现在应该是折腾成功了,下面是详细操作步骤:
有编译安装和快速安装两种方式,编译安装更稳定,但是要慢的多,快速安装快很多,但是没这么稳定,具体稳定性的区别,我也不是很清楚。不过我是选择的快速安装,大概也要10多分钟左右。
找到里面的“安装扩展”,安装memcached,注意是以字母D结尾的这个,memcached和memcache是不同的两种扩展:
我上面是已经安装好了,所以在状态栏里直接显示的是“√”。
有两个地方可以下载,我们可以访问github项目页面下载插件包:
https://github.com/tollmanz/wordpress-pecl-memcached-object-cache
下载并解压得到的 object-cache.php,上传到 wp-content 目录即可开启memcached缓存。(注意是上传到wp-content 目录,上传到其它目录是没用的)
或者我们去wodpress后台的插件库里下载MemcacheD Is Your Friend,只要后台搜索下既可默认下载安装就可以了。
PHP Memcached 扩展:https://wordpress.org/plugins/memcached-is-your-friend/
据说:
WordPress官网上还有的object-cache.php虽然也号称Memcached 插件,然而它只支持Memcache,不支持新版的,所以不能使用。
这个说法我没有去验证,我是直接下载,然后上传的。
到底为止,可以登录网站后台,在后台的插件中看到一个文件:
上述所说步骤做完之后,编辑博客根目录的wp-config.php 文件,添加下方两段代码进去并保存:
define(‘ENABLE_CACHE’, true);
define(‘WP_CACHE’, true);
如图所示:
注意,我开始编辑的时候,直接把上面的代码放到了config.php文件后面,结果查看插件时,发现一个插件是没有启用的状态,结果发现是放的位置不对,你可以参照上图,放在如上图所示的代码位置。
define('ENABLE_CACHE', true);这段是激活Memcached; define('WP_CACHE', true);是激活Batcache;
本来,到这里应该就是已经安装好了memcached缓存,但是用网站测速测速,多个节点加载时,到处都红了,红了就代表加载慢,查看服务器的CPU,在加载页面时,CPU爆棚了,连续一段时间的占用率都是百分之百,我推测,是不是因为memcached是不是没有安装成功呢?
下载文件:
http://pecl.php.net/get/memcache-3.0.8.tgz
解压以后,提取memcache.php,修改里面的数据成如下:
define(‘ADMIN_USERNAME’,’memcache’); // Admin Username,设置账户名
define(‘ADMIN_PASSWORD’,’password’); // Admin Password,设置密码
define(‘DATE_FORMAT’,’Y/m/d H:i:s’);
define(‘GRAPH_SIZE’,200);
define(‘MAX_ITEM_DUMP’,50);$MEMCACHE_SERVERS[] = ‘127.0.0.1:11211’; // add more as an array,127.0.0.1代表就是本机地址
上传到服务器你想放的位置,我就是放在了网站的根目录,然后访问这个页面,输入上面你设置的账户密码,就可以看到数据了。
如图,我的命中率是百分之89.9,我的理解就是访问数据库的查询减少了百分之89.9,只有百分之10是真正查询了数据库的。
到了这里,我很关注CPU占用是不是降低了,结果用测速网站测试,发现测速的时候,CPU占用还是爆满。
我猜想应该是memcached虽然降低了数据库的访问次数,但是生成页面仍然是需要消耗CPU的,所以仍然会引起CPU占用较多。
看到很多博文里在推荐memcached的同时,还推荐了另外一个插件:batcache
这个插件的作用是将访问过的的页面静态化,存储在memcached分配的内存中,这样就减少了生成页面的CPU消耗。
batcache可以将整个页面缓存到内存中,下次直接从内存中取出html,完全不需要计算,所以速度非常快。下载解压后其实只有advanced-cache.php是有用的,而batcache.php是一个提供情况缓存的GUI入口,并无大用。
直接在WordPress后台搜索安装 batcache ,也可以从官方下载插件包:
https://wordpress.org/plugins/batcache/
然后解压得到 advanced-cache.php 上传到wp-content即可。
其中advanced-cache.php有一些自定义的选项可供配置:我们打开源代码编辑调成成下面的模式。
var $max_age = 3600; // Expire batcache items aged this many seconds (zero to disable batcache) var $remote = 0; // Zero disables sending buffers to remote datacenters (req/sec is never sent) var $times = 2; // Only batcache a page after it is accessed this many times… (two or more) var $seconds = 0; // …in this many seconds (zero to ignore this and use batcache immediately)
max_age代表缓存过期时间(以秒为单位),times表示访问多少次才创建缓存(2是最小值),seconds表示在多少秒之后才创建缓存(0表示立即)。
之后将advanced-cache.php上传到wp-content目录即可。
这时,可以看到插件中,有两个插件名称:
有的文章上说,能够在插件中看到如图所示的启用memcached插件成功的截图:
但是小编测试,并没有看到这个显示。
做完了这步以后,访问页面,查看页面源码,可以看到源码底部有缓存生成的时间和有效期了:
然后我又用网站测速测试了一下,对比W3 Total Cache,或者是supercache,用这种方案的CPU占用仍然比这两个要高,这说明另外两种方式相对来说更能提高网站的并发处理能力。我的理解是另外两种方式生成了几乎全静态页面,所以并不需要CPU去生成页面或者从数据库访问数据了。
但是这种方式也有优点,那就是如果动态内容比较多,相对更合适,因为另外两种方式生成的都是纯静态的内容,因此,如果你想提高服务器的性能,像小编这种1G1核的小服务器,那还是最好采用W3 Total Cache、supercache这种方式。
补充:经过和网友的讨论,网友认为使用内存缓存的速度肯定是比硬盘缓存速度快的,虽然使用memcached缓存占用的CPU更高,但并不代表速度比硬盘缓存速度慢,而是一定要更快,同样的数据,分别从内存和硬盘读取,一定是内存快,cpu占用高不代表响应慢。也就是说实际访问速度,应该是内存缓存更快。再考虑到真实访问实际上并没有达到站点测速时的访问量(同一时间,几十个用户访问),所以实际上内存缓存效果更好。