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也只是初步了解状态,感兴趣的朋友可以自行搜索学习更多相关设置。

发表评论

gravatar

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

刷新评论

目前评论:66   其中:访客  46   博主  20

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

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

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

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

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

      redis搞起来会更简单一些

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

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

  4. 明月登楼 5 来自天朝的朋友 谷歌浏览器 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. 技术宅 3 来自天朝的朋友 谷歌浏览器 Windows 7 江苏省南京市玄武区 畅艺网络服务中心(仙鹤门仙鹤茗苑)

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

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

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

  9. 刷百度手机下拉 2 来自天朝的朋友 谷歌浏览器 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两者哪个更好些,谢谢啦!

加载中,请稍候...