WordPress启用memcached动态缓存以及报错解决

张戈博客目前用的是Nginx 的 fastcgi 缓存方案,属于纯净态缓存模式,所以前台登录态什么的基本都没了。如果要兼顾前台登录态,又想速度快,有没有解决方案?

之前在分享张戈博客优化方案时提到,要实现网站轻度缓存,方案还是有的,比如 DB Cache Reloaded、Redis、memcached 等。

最近恰好遇到一个数据缓存需求,因此尝试了下 memcached 方案,下面简单分享下我的环境部署以及报错解决过程。WordPress启用memcached动态缓存以及报错解决

一、d 还是不 d

php 有 memcached 和 memcache 两个类似组件,百度搜出来的文章,大部分是教你如何安装 memcache(d),却步解释二者的区别。

比如这位博客仁兄的经验分享:WordPress启用memcached动态缓存以及报错解决

为什么他选第二个不行?其实 php 的这 2 个组件还是有点区别的:

简单来说:

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

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

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

其实,我们这种小网站的话,二选一即可,这点 QPS 还不至于纠结。不过一旦选择了,安装的时候就要注意区分,一对一配套安装,别搞的牛头不对马嘴,出现上面那位仁兄的困惑(后文有相关说明)。

这里,我果断选择了带 d 的,继续分享。

二、部署 memcached

1、安装 memcached

Ps:这里的 memcached 是指 Mencached 的服务端,用来处理缓存数据,名字也是容易混淆。

下面 2 种安装方式任选其一:

①、在线安装

②、编译安装

相比在线安装,很多时候编译安装更加灵活,非常类似 Windows 平台的自定义安装或绿色安装,推荐熟悉 Linux 系统的朋友使用:

至此 memcached 的服务端就安装好了。

2、集成 php-memcached 拓展

①、先安装 libmemcached

提前分享一个问题,如果直接按照网上的教程安装 php-memcached 可能会报如下错误:

configure: error: no, sasl.h is not available. Run configure with --disable-memcached-sasl to disable this check

大部分教程会使用 --disable-memcached-sasl 参数来禁用这个功能,作为一个强迫症,我还是从国外的论坛扒到了解决方法,很简单,在编译 libmemcached 之前,先安装 cyrus-sasl-devel 即可解决

接着开始编译安装 libmemcached:

②、安装 php-memcached 组件

下载和解压这步,我们要区分下是 php7 还是之前的版本:

I、如果当前环境是 php7 :

II、如果是旧的的 php 版本:

接下来开始编译:

编辑 php.ini 文件,在最后插入如下参数

Ps:如果不知道 php.ini 在哪个位置 ? 执行命令:php --ini 即可找到。

保存后,执行如下命令看看是否加载成功:

如果输出 memcached 则表示成功。

最后,如果是 Nginx 就 service php-fpm reload ,如果是 Apache 就重启 Apache 完成安装。

③、测试缓存

将上述代码保存为 test.php,然后执行 php -f test.php,如果能输出 100 表示安装成功。

三、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、查看效果

做完第 2 步之后,你可以去网站前台刷新几次,产生缓存,然后从官方下载探针:

http://pecl.php.net/get/memcache-3.0.8.tgz

解压后,里面有一个 memcache.php 文件,编辑并找到如下代码:

修改如下:

上传到网站私密目录(临时测试可以放到根目录),然后通过前台访问 memcache.php 这个文件,输入上面的用户名和密码即可看到 memcached 状态:

WordPress启用memcached动态缓存以及报错解决

3、其他设置

如果发现页面可以打开,但是里面没有 Hits 数据,说明 WordPress 并没有成功连接到 memcached,这时候我们可以在 wp-config.php 加入如下参数:

实际的 memcached 监听 IP 和端口,你可以通过如下命令查看:

四、纯静态缓存

实际上 memcached 可以缓存动态查询数据,他也可以缓存 html 内容!因此,memcached 也能实现和其他方案一样的 html 纯净态缓存!

实现原理和我之前分享的 php 代码缓存 html 方案类似,不过后者更好的是将缓存内容放在了内存当中,速度比放硬盘快的绝对不是一点点。

如何将前台页面 html 都缓存到 memcached 中呢?这里,我们需要用到 batcache 这款插件。

1、下载安装

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

https://wordpress.org/plugins/batcache/

然后解压得到 advanced-cache.php 上传到 wp-content 即可。

2、启用缓存

在 wp-config.php 中启用缓存:

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

3、参数调整

max_age 代表缓存过期时间(以秒为单位),times 表示访问多少次才创建缓存(2 是最小值),seconds 表示在多少秒之后才创建缓存(0 表示立即)。

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

目前评论:81   其中:访客  58   博主  23

  1. 小C博客 4 来自天朝的朋友 QQ浏览器 Windows 7 浙江省杭州市 电信

    我装的是redis,但我不会用。就一直在哪放到。等有时间试试memcached,感谢分享!!

  2. 晓庄 4 来自天朝的朋友 谷歌浏览器 Windows 8.1 广东省深圳市 电信

    一直没玩过类似的这些东西。
    只有在dz的时候,直接开启redis使用了。那个开启还是挺简单的

    • 张戈 [博主] 来自天朝的朋友 Safari浏览器  Android 5.1.1 Redmi Note 3 Build/LMY47V 广东省深圳市 电信

      redis搞起来会更简单一些

  3. 好文推荐 4 来自天朝的朋友 谷歌浏览器 Windows 10 广东省广州市 联通

    前段时间弄了一下缓存、后面怎么突然打开速度觉得变慢了、可能内容太少的缘故吧

  4. 明月登楼 6 来自天朝的朋友 谷歌浏览器 Windows 10 河南省洛阳市 联通

    至今还用的是虚拟主机,没有体验过Memcached呢!

    • 五四青年 4 来自天朝的朋友 谷歌浏览器 Windows 10 广东省广州市 联通

      你的流量那么大、还在用虚机的啊

  5. 柒月网络 1 来自天朝的朋友 谷歌浏览器 Windows 10 广东省广州市 电信

    指明了一些人的误区,我转载修改补充一些地方!

  6. aunsen 4 这家伙可能用了岛国的代理 火狐浏览器 Windows 10 日本 东京都Linode公司KDDI数据中心

    以后要请张戈帮忙部署服务器环境了。
    我的站由于更新了WP4.51和鸟哥的最新主题,导致资源占用奇高,服务器都挂了,排除发现是xmlrpc的锅,修复了xmlrpc的问题后还是占用高,后来降级WP到4.4,主题也降到老版的1.8,可问题还是依旧,米办法现在只有搬到米国呆一阵子了,唉,想哭!

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      被人攻击了吧

      • aunsen 4 这家伙可能用了岛国的代理 火狐浏览器 Windows 10 日本 东京都Linode公司KDDI数据中心

        鬼知道啊,郁闷

        • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

          有空一起看看

  7. 牧羊人 2 来自天朝的朋友 谷歌浏览器  MZ-PRO 5 Build/LMY47D) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/45.0.2454.94 Mobile Safari/537.36 重庆市 联通

    这玩儿好像很消耗内存。。。

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      是的,所有数据都放到内存中,不过一般个人网站数据都不会太大,最多占用个1~200M吧,不算问题。

    • 煙云 1 来自天朝的朋友 谷歌浏览器 Windows 7 湖南省长沙市 电信

      应该是可以指定缓存内存大小的。博主图片中已经显示,缓存内存64M

      • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

        /etc/init.d/memcached 这个文件开头有几行参数,里面可以定义内存占用的最大值 CACHESIZE=64

  8. 技术宅 4 来自天朝的朋友 谷歌浏览器 Windows 7 江苏省南京市玄武区 畅艺网络服务中心(仙鹤门仙鹤茗苑)

    请问可以和nginx Fastcgi cache 一起用吗?

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      使用上没冲突,但是没必要重复。用了之后,动态部分会快一些,比如WP后台。

  9. 刷百度手机下拉 3 来自天朝的朋友 谷歌浏览器 Windows XP 浙江省嘉兴市 电信

    看来以后服务器有什么问题,要来求你帮忙指导了

  10. 孟子非博客 3 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 电信

    不是程序猿有点看天书的感觉

  11. 跨境电商平台 3 来自天朝的朋友 谷歌浏览器 Windows 7 广东省广州市 电信

    非常不错!!!!

  12. 诸葛博客 2 来自天朝的朋友 谷歌浏览器 Windows XP 浙江省宁波市 联通

    顶一个签到成功!签到时间:上午9:58:49,每日签到,生活更精彩哦~

  13. 威客网 1 来自天朝的朋友 谷歌浏览器 Windows 7 广西南宁市 联通

    技术文章支持下~

  14. 热腾网 4 来自天朝的朋友 谷歌浏览器  N918St Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36 河北省石家庄市 电信

    现在还是静态缓存吧?见到文章的浏览次数不变。

  15. 暗示法 0 这家伙可能用了岛国的代理 谷歌浏览器 Windows 7 日本 东京都Linode公司KDDI数据中心

    写的太复杂了,简单的东西复杂化。

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省深圳市 电信

      本人不才,那你分享一下复杂的东西简单化吧,让我也学习下。不留网址、IP用的小日本代理、邮箱还是错的,看来是不愿意交流咯?

  16. Qa 4 来自天朝的朋友 谷歌浏览器 Windows 7 湖南省长沙市 电信

    这个天坑我服,还真不知道官网上的对象缓存插件还有这个坑。 :arrow:

  17. 玄烨轩 0 来自天朝的朋友 谷歌浏览器 Windows 10 广东省江门市新会区 电信

    感觉有点复杂,现在太复杂都找空间商帮忙

  18. 狂族晨曦 5 来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 联通

    学了Linux后,看教程终于不那么吃力了,但是还没实际操作过,继续努力!

  19. Seon 2 来自天朝的朋友 谷歌浏览器  MI 4LTE Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.89 Mobile Safari/537.36 广东省佛山市 电信

    memcached有研究过,在Apache和Nginx上都有撸过,个人感觉使用Apache时memcached缓存会比Nginx好一点,不知道是不是错觉。Redis之前研究过,后来搁置一边了,前些天又撸起来了,但是发现Redis有个问题就是前面的评论所填写的信息下一个访客会看到(老鬼有出过解决方案不过很久没折腾了忘记在哪里了)。。不知道能不能在你这边取到经 :roll:

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省深圳市 电信

      评论信息和缓存本身就是鱼和熊掌的关系。
      我目前处理办法是去掉所有php中关于用户信息的代码
      改成cookie记录和填充方式。

      • Seon 2 来自天朝的朋友 谷歌浏览器 Mac OS X 10_11_5 广东省东莞市 电信

        咦?分享一下你的处理方法吧 :lol:

        • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省深圳市宝安区 电信

          http://zhangge.net/4538.html

          • 后知后觉 3 来自天朝的朋友 谷歌浏览器 Windows 10 浙江省杭州市 电信

            鸟哥最新的主题不好处理登陆状态,总有些页面残留着上一个人的信息,张戈大大能帮忙看下吗 :sad:

            • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省深圳市 电信

              前台审查元素分析出现登录信息的关键词,然后全局代码搜索下关键词出现的主题php文件,然后改掉就好了。

  20. SEO学习群192509990 2 来自天朝的朋友 谷歌浏览器 Windows 7 湖南省岳阳市 联通

    签到成功!签到时间:下午3:43:55,一起交流学习,进群有干货分享哦

  21. SEO学习群192509990 2 来自天朝的朋友 谷歌浏览器 Windows 7 湖南省岳阳市 联通

    分享一下

  22. 海外敗 1 来自天朝的朋友 谷歌浏览器 Windows 10 广东省湛江市 电信

    感谢博主分享

  23. magicboy8040 1 来自天朝的朋友 谷歌浏览器 Windows 7 河南省郑州市 联通

    今天尝试了一把,因为是kangle服务器源码,在PHP.INI最后一行添加extension=memcached.so报错如下:

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      发邮件吧,貌似代码没上传成功。

  24. magicboy8040 1 来自天朝的朋友 谷歌浏览器 Windows 7 河南省郑州市 联通

    报错如下

  25. 软件海 3 来自天朝的朋友 谷歌浏览器 Windows 7 陕西省西安市 电信

    我在WP官网上看,mencached插件是2月前才更新的,但是github上显示的是2年前更新的,为什么你要说WP官网上的是旧版本?

    • 软件海 3 来自天朝的朋友 谷歌浏览器 Windows 7 陕西省西安市 电信

      我这边启用了mencached缓存之后,之前注册的用户全部无法登录了,必须要重新修改一下密码才可以登录,好在刚开启的登录功能,只有五个用户,简单通知一下就行了,问题不大。但是奇怪的是,我用管理员的帐号登录就没有任何问题。
      mencached缓存是在内存中存储的,那如果机器重启了,或者手动刷新了mencached缓存,不会又出现所有用户无法登录的情况吧~

      • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 山西省太原市 电信

        memcache不应该会出现这种情况吧,确保使用了wordpress配套的memcached插件

        • 软件海 3 来自天朝的朋友 谷歌浏览器 Windows 10 陕西省西安市 电信

          我是在wordpess官网上下载的memcached插件。昨天也在其它博客里看到你说的这个坑,我还是把wordpress官网那个插件删了吧。

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 山西省太原市 电信

      不是你理解的旧版本,而是基于C的memcached比php原生的memcache更新,性能也更好一些。

  26. 李东辉博客 0 来自天朝的朋友 谷歌浏览器 Windows 10 上海市 电信

    学习了。都是技术性文章,收藏,

  27. 嗯view 1 来自天朝的朋友 谷歌浏览器 Ubuntu Linux 天津市 联通

    wordpress +memcached 明智之选

  28. 刘传鹏博客 1 来自天朝的朋友 火狐浏览器 Windows 10 湖北省宜昌市 电信

    我的博客就是wordpress+memcached的,,不过我是Windows2008的

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省深圳市 移动

      厉害,你博客速度很快。

  29. 大蚂蚁 1 来自天朝的朋友 谷歌浏览器 Windows 7 江苏省苏州市 电信

    好吧,我是个纯小白,问下网站私密目录是哪里?还有我的missing好高呀,69%,这个可以调整吗?网站还是个测试站点。作为一个纯小白,我想说zhangge.net,为我指明了很多次方向。谢谢。

    • 张戈 [博主] 来自天朝的朋友 Safari浏览器  Android 5.1.1 Redmi Note 3 Build/LMY47V 广东省佛山市 电信

      私密目录就是只有你自己知道的目录。。。搞不清楚就放根目录。

  30. Qa 4 来自天朝的朋友 谷歌浏览器 Windows 7 湖南省益阳市 电信

    用了博主提供的那个版本的object-cache.php ,错误导致网站500!
    PHP Fatal error: Maximum execution time of 5 seconds exceeded in /data/wwwroot/acg18/wp-content/object-cache.php on line 900

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      用错版本了吧,这个是memcached

      • Qa 4 来自天朝的朋友 谷歌浏览器 Windows 7 湖南省益阳市 电信

        没,大部分时间正常…但是一抽风及完蛋。重启啥都没用了只能删了这文件。

        • 张戈 [博主] 来自天朝的朋友 Safari浏览器  Android 5.1.1 Redmi Note 3 Build/LMY47V 广东省佛山市 电信

          memcached没做开机启动吧?重启系统就没了

          • Qa 4 来自天朝的朋友 谷歌浏览器 Windows 7 湖南省益阳市 电信

            这种错误就不会犯了。
            挺奇葩的问题,就问下看看有没有也遇到过的。

            • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省佛山市 电信

              没遇到过哦

  31. 小舞 2 来自天朝的朋友 谷歌浏览器 Windows 10 河南省南阳市唐河县 联通

    super cache+memcached应该好用吧,老是感觉super cache对apache有好

  32. 李光春 1 来自天朝的朋友 谷歌浏览器 Windows 7 广东省广州市越秀区 电信

    我也搞了这个 :mrgreen:

  33. 小舞 2 来自天朝的朋友 谷歌浏览器 Windows 10 河南省南阳市 联通

    这个同一个服务器下几个站点用这个会出错,config那边需要更改下,希望也更新下

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省广州市 移动

      具体是?

      • 小舞 2 来自天朝的朋友 谷歌浏览器 Windows 10 河南省南阳市 联通

        因为同一个服务器下有几个站点,如果A站点启用memcache的话,B启用就会空白,后台访问b就会跳转到A去

        • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省深圳市 电信

          估计是缓存的key设置不够精细,导致无法区分站点。。

  34. 惜时 0 来自天朝的朋友 谷歌浏览器 Windows 7 海南省海口市 电信

    看了博主的教程,缓存成功!不过我的网站每天都有更新,由于缓存,有些地方数据不更新,比如文章归档页,,,怎么修改缓存时间 :?: 还是有什么更好的方法!

  35. Ashin 0 来自天朝的朋友 谷歌浏览器 Windows 8.1 重庆市 电信

    感谢,先试试效果~!

  36. iiong 0 来自天朝的朋友 谷歌浏览器 Mac OS X 10_12_5 辽宁省沈阳市 联通GSM/WCDMA/LTE共用出口

    我目前开启了fastcgi_cache缓存, memcached缓存动态查询数据,请问batcache这个还需要安装吗?
    batcache与fastcgi cache两者哪个更好些,谢谢啦!

  37. 宅男猫 0 来自天朝的朋友 谷歌浏览器 Windows 7 广东省广州市 联通

    认真看了一遍感觉非常详细,我站的memcached的问题就是在你和水煮鱼的博客之间来回看搞定的。
    那会儿还以为你这只是一个无名小站,虽然收藏了这篇但是并没有太过于关注。。。后来朋友推荐说张戈的博客超牛逼的。。。我回过神来才知道是大神~~万分感谢为我们这些不懂得人,提供认真看能看懂的文章。拜谢

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      客气了~

  38. 哈卡 1 来自天朝的朋友 谷歌浏览器  MI 5 Build/NRD90M 上海市 联通漕河泾IDC机房

    fastcgi 和 memcached 缓存mhtml页面用哪个好呀?
    貌似Memcached不能根据需要,比如更新文章等自动清除缓存。

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      memcached可以用batcache 插件来解决缓存清理问题

  39. boyizmen 0 来自天朝的朋友 谷歌浏览器 Windows 7 浙江省杭州市 电信

    启用batcache插件后前端页面直接崩了,博主知道什么原因吗?
    打字这特效看的眼睛花。。。 :sad:

  40. lemon 0 来自天朝的朋友 谷歌浏览器 Windows 10 北京市 联通

    你好,之前用的W3 total cache 里的 memcached 缓存 也缓存成功了,今天升级了PHP版本,然后W3TC 就连不上memcached 了,请问大神知道怎么解决或者排除故障么?

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      登陆服务器检查11211端口是否存在,看起来是memcached服务挂了

  41. 张尧博客 1 来自天朝的朋友 谷歌浏览器 Windows 7 重庆市 联通

    发现有人抄袭博主这篇文章:
    http://www.daniao.org/2280.html

  42. 张尧博客 1 来自天朝的朋友 谷歌浏览器 Windows 7 重庆市 联通

    发现有人抄袭博主这篇文章:http://www.daniao.org/2280.html

  43. 绿茶 1 来自天朝的朋友 谷歌浏览器 Windows 10 浙江省杭州市 移动

    按步骤操作,一直操作到编译php.ini前面的那个步骤时候,出现报错,就是在安装php-memcached组件的时候的最后一个
    make && make install 的时候,报make: *** No targets specified and no makefile found. Stop这个错误

  44. CE安全网 1 来自天朝的朋友 谷歌浏览器 Windows 10 河北省保定市 电信

    advanced-cache.php
    高级缓存插件。 未启用: 需要在wp-config.php文件中包含define(‘WP_CACHE’, true);。

  45. CE安全网 1 来自天朝的朋友 谷歌浏览器 Windows 10 河北省保定市 电信

    大家有遇到这样的情况吗? config文件已经加上了 define(‘WP_CACHE’, true); 后台插件还是显示未启用

  46. 魏艾斯博客 1 来自天朝的朋友 谷歌浏览器 Windows 7 辽宁省 联通

    我的服务器上了memcached,opcache和batcached,现在有个问题就是首页置顶第一篇文章,本身编辑的时候是取消了置顶的,但游客访问的时候还依然是置顶状态,这是为什么?如何能解决呢?

    • 魏艾斯博客 1 来自天朝的朋友 谷歌浏览器 Windows 7 辽宁省 联通

      自己搞定了,不修改直接上传源文件就没这个问题了。

  47. 无心 0 来自天朝的朋友 谷歌浏览器 Mac OS X 10_13_5 浙江省杭州市 电信

    请问使用了memcached缓存,还有必要使用CDN加速吗?如果2个一起用有冲突吗

加载中,请稍候...

文章过于久远,评论已关闭!