【Memcached+Memcache】WordPress安装Memcached(Memcache)缓存加速

wordpess安装好之后如果不做缓存设置,那访问速度大家懂的,很缓慢,你随便一个F5一直按住多刷新几下,就直接变成cc攻击的效果,站点不能访问,擦啊,真是醉了!但是WordPress好处多多,喜欢的人很是喜欢。不过大家也可以用别的blog系统,比如说zblog emblog这两种国人自己开发的blog速度那叫一个快。

好了下面说说内存缓存memcached可以突破MySQL性能瓶颈,加速博客的访问这个问题。

安装Memcached拓展

Memcached是php的一个拓展,类似的拓展还有Memcache。少了一个d的是旧版,多了一个d是新版。新版有更好的性能,推荐安装。

简单来说:

memcache 是 pecl 扩展库版本,原生支持php,出现更早,是老前辈;

memcached 是 libmemcached 版本,出现较后,是新一代,因此也更加完善,推荐使用。

Ps:如果想更深入了解,可以搜索下 memcache vs memcached

  1. 我使用的是lnmp一键安装包,这里面就附带了上述两个拓展的源码。进入lnmp解压后的目录,执行下面的语句!
  2. ./addons.sh install memcached

输出:

  1. +———————————————————————–+
  2. |            Addons script for LNMP V1.3, Written by Licess             |
  3. +———————————————————————–+
  4. |    A tool to Install cache,optimizer,acceleratoraddons for LNMP    |
  5. +———————————————————————–+
  6. |          For more information please visit http://www.lnmp.org        |
  7. +———————————————————————–+
  8. Which memcached php extension do you choose:
  9. Install phpmemcache,(Discuz x) please enter: 1
  10. Install phpmemcached, please enter: 2
  11. Enter 1 or 2 (Default 1):

这里选择2即可,安装时候的截图是这个样子的。

选择1,和2,都可以。但是选择2上面说了Memcached是php的一个拓展,类似的拓展还有Memcache。少了一个d的是旧版,多了一个d是新版。新版有更好的性能,推荐安装。所以我们选择2,功能上强大点,但是,我们这点流量,你选择1也差不多不大。不用太纠结。强迫症可以一定会选择2,我懂的。

如果选择1到这下载 WordPress Memcached 插件

解压后,将 object-cache.php 上传到 wp-content 目录(不是 wp-content/plugins/),这样 WordPress 会自动检查在 wp-content 目录下是否有 object-cache.php 文件,如果有,直接调用它作为 WordPress 对象缓存机制。

注意:如果你的服务器安装了多个 WordPress,请确保每个WordPress站点使用了不同的数据库前缀,如果前缀一样,比如都是 wp_ ,就很可能造成冲突,因为每个网站的数据都通过内存进行缓存,前缀一样就会打架啦!为你的 WordPress 站点开启了 memcached 缓存以后,就没必要安装 DB Cache Reloaded Fix 这类数据库缓存插件了。

选择2的就可以安装wordpress-pecl-memcached-object-cache

WordPress官网上的object-cache.php虽然也号称Memcached 插件,然而它只支持Memcache,不支持新版的,所以不能使用。如果错误地将object-cache.php和Memcached混用的话,则会出现WordPress打不开,前台后台页面一片空白的现象。

WordPress缓存

做完上述所有步骤,系统环境就已经支持memcached缓存了。下面分享如何应用到WordPress

1、安装插件

访问github项目页面下载插件包:

https://github.com/tollmanz/wordpress-pecl-memcached-object-cache

下载并解压得到的 object-cache.php,上传到 wp-content 目录即可开启memcached缓存。

值得说明的是,这里还有一个大坑等着你来踩:

WordPress官网上的object-cache.php虽然也号称Memcached 插件,然而它只支持Memcache,不支持新版的,所以不能使用。如果错误地将object-cache.php和Memcached混用的话,则会出现WordPress打不开,前台后台页面一片空白的现象。

这也就是经常有站长反馈WordPress启用memcached功能后,页面空白的错误原因了。不巧,可爱变在测试的时候也踩坑了,所以特别提出来,希望大家了解错误的原因,避免掉!

2、安装batcache插件

batcache可以将整个页面缓存到内存中,下次直接从内存中取出html,完全不需要计算,所以速度非常快。下载解压后其实只有advanced-cache.php是有用的,而batcache.php是一个提供情况缓存的GUI入口,并无大用。

直接在WordPress后台搜索安装 batcache ,也可以从官方下载插件包:

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即可。

要开启缓存的话,还需要编辑wp-config.php:

define(‘WP_CACHE’, true);

当然,插件默认只会对游客缓存,显然也是怕影响到前台登录态。缓存和动态判断一直是矛与盾、鱼和熊掌,看个人抉择吧

查看Memcached命中率

有时候我们想看看Memcached的加速效果,这时候可以利用官网上的一个工具:http://pecl.php.net/get/memcache-3.0.8.tgz

解压后提取memcache.php上传到服务器,访问后即可看到缓存效果:


ssh下面用命令方式来查看 Memcached 缓存情况

我们需要使用 telnet 命令查看,首先检测一下是否已安装 telnet 包

rpm -qa |grep telnet

如果安装了,会返回相关版本

telnet-0.17-41.el5
telnet-server-0.17-41.el5

如果没有安装,运行下面的命令,注意在root下安装

yum install xinetd
yum install telnet
yum install telnet-server

特别说明:telnet服务要依靠xinetd服务启动,所以要先安装xinetd服务。所以我们要先安装xinetd,再安装telnet-server。

然后链接到 telnet 服务

telnet 127.0.0.1 11211

如果链接成功,会返回:

Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is ‘^]’.

然后输入

stats

回车,就可以看到 Memcached 的缓存情况

STAT pid 20439  —— Memcached 进程的ID
STAT uptime 179982 —— 进程运行时间
STAT time 1382361665 ——当前时间
STAT version 1.4.15 —— Memcached 版本
STAT libevent 1.4.13-stable
STAT pointer_size 32
STAT rusage_user 21.916668
STAT rusage_system 40.576831
STAT curr_connections 11
STAT total_connections 329
STAT connection_structures 23
STAT reserved_fds 20
STAT cmd_get 2363348 —— 总共获取数据的次数(等于 get_hits + get_misses )
STAT cmd_set 279971 —— 总共设置数据的次数

STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 2286284 —— 命中了多少次数据,也就是从 Memcached 缓存中成功获取数据的次数
STAT get_misses 77064 —— 没有命中的次数

STAT delete_misses 30803
STAT delete_hits 48876
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 574591015
STAT bytes_written 4353057466
STAT limit_maxbytes 67108864 —— 总的存储大小,默认为 64M
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 262144
STAT hash_is_expanding 0
STAT bytes 4717345 —— 当前所用存储大小
STAT curr_items 5654
STAT total_items 58461
STAT expired_unfetched 17
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 49
END

以上数据的命中率:2286284/2363348 = 96.7% 说明当前命中率是比较高的。

如果你要清空现有数据,可以使用下面的命令:

stats reset

要退出 telnet,输入组合键 Ctrl+] 出现

telnet>

输入 quit 即可退出。

1.关闭Memcached

直接使用 kill 进程ID 即可,比如上面信息显示的进程ID为20439,那就使用 kill 20439

2.重新启动Memcached,并且修改内存等参数,样例如下(修改最大内存为 1024M,最大连接数为 4000):

memcached -d -m 1024 -u root -l 127.0.0.1 -p 11211 -c 4000 -P /tmp/memcached.pid 11211

些参数介绍如下:

-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助

我目前也只是要用到memcache的动态缓存,所以对于batcache也只是初步了解状态,感兴趣的朋友可以自行搜索学习更多相关设置。