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
- 我使用的是lnmp一键安装包,这里面就附带了上述两个拓展的源码。进入lnmp解压后的目录,执行下面的语句!
- ./addons.sh install memcached
输出:
- +———————————————————————–+
- | Addons script for LNMP V1.3, Written by Licess |
- +———————————————————————–+
- | A tool to Install cache,optimizer,accelerator…addons for LNMP |
- +———————————————————————–+
- | For more information please visit http://www.lnmp.org |
- +———————————————————————–+
- Which memcached php extension do you choose:
- Install php–memcache,(Discuz x) please enter: 1
- Install php–memcached, please enter: 2
- 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 ,也可以从官方下载插件包:
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即可。
要开启缓存的话,还需要编辑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也只是初步了解状态,感兴趣的朋友可以自行搜索学习更多相关设置。