PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > CMS教程 > wordpress教程 > 正文

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

    作者:admin来源:转载浏览:时间:2020-09-30 00:07:50我要评论
    导读:正好手头有一个需求就是需要轻度的数据缓存,因此尝试了一把memcached,简单分享下部署过程及遇到的报错和解决。一、d还是不d说到php的memc...
    正好手头有一个需求就是需要轻度的数据缓存,因此尝试了一把memcached,简单分享下部署过程及遇到的报错和解决。

    一、d还是不d

    说到php的memcached和memcache组件,百度一搜都会教你如何安装memcache(d),然后很多人就照着做,做到最后发现不对,试了半天虽然搞定了,但还是不知道到底有d还是没有d,比如这位博客仁兄的经验分享:WordPress启用memcached动态缓存以及报错解决

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

    简单来说:

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

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

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

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

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

    二、部署memcached

    1、安装memcached

    Ps:说到这里又杀出一个容易混淆的程咬金。这里要安装的memcached是指Mencached的服务端,用来处理缓存数据。

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

    ①、在线安装

    1. #Centos直接使用yum安装即可,其他系统自行搜索安装命令,比如ubuntu 
    2. yum -y install memcached 
    3.  
    4. #启动memcached 
    5. service memcached start 
    6.  
    7. #开机启动 
    8. chkconfig memcached on 
    ②、编译安装

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

    1. #从官方下载最新源码包 
    2. wget http://memcached.org/files/memcached-1.4.25.tar.gz 
    3.  
    4. #解压开始编译安装 
    5. tar xzvf memcached-1.4.15.tar.gz 
    6. cd memcached-1.4.15 
    7. ./configure --prefix=/usr/local/memcached 
    8. make && make install 
    9. cd .. 
    10.  
    11. #设置环境 
    12. ln -s /usr/local/memcached/bin/memcached /usr/bin/memcached 
    13. cp scripts/memcached.sysv /etc/init.d/memcached 
    14.  
    15. #改为监听127.0.0.1,并关闭UDP连接方式,若为远程服务调用或不需要的话请跳过此行 
    16. sed -i 's/OPTIONS=""/OPTIONS="-l 127.0.0.1 -U 0"/g' /etc/init.d/memcached 
    17.  
    18. sed -i 's@chown@#chown@' /etc/init.d/memcached 
    19. sed -i 's@/var/run/memcached/memcached.pid@/var/run/memcached.pid@' /etc/init.d/memcached 
    20.  
    21. #启动并设置开机服务 
    22. chmod +x /etc/init.d/memcached 
    23. service memcached start 
    24. chkconfig --add memcached 
    25. chkconfig memcached on 

    至此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

    先看看SASL是什么?

    SASL全称Simple Authentication and Security Layer,是一种用来扩充C/S模式验证能力的机制。
    简单来说SASL是一个胶合(glue)库,通过这个库把应用层与形式多样的认证系统整合在一起。这有点类似于 PAM,但是后者是认证方式,决定什么人可以访问什么服务,而SASL是认证过程,侧重于信任建立过程,这个过程可以调用PAM来建立信任关系。在这里Memcached就是上面提到的应用层,具体的认证交给SASL库,SASL会根据相应的认证机制来完成验证功能。

    果然,一般也用不到,所以大部分教程都是使用错误提示中的 --disable-memcached-sasl 来禁用张戈功能,作为一个强迫症,我还是从国外的论坛扒到了解决方法,很简单,在编译libmemcached之前,先安装cyrus-sasl-devel即可解决
     

    1. yum install cyrus-sasl-devel 

    接着开始编译安装libmemcached:
     

    1. wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz 
    2. tar xzf libmemcached-1.0.18.tar.gz 
    3. cd libmemcached-1.0.18 
    4. ./configure --with-memcached=/usr/local/memcached --prefix=/usr/local/libmemcached 
    5. make && make install 
    6. cd .. 

    ②、安装php-memcached组件

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

    I、如果当前环境是php7 :
     

    1. #从github下载PHP7专用的memcached组件分支 
    2. wget https://github.com/php-memcached-dev/php-memcached/archive/php7.zip 
    3. #解压备用 
    4. unzip php7.zip 
    5. cd php-memcached-php7 


    II、如果是之前的php版本:
     

    1. #从官方下载php-memcached的最新源码包 
    2. wget http://pecl.php.net/get/memcached-2.2.0.tgz 
    3.  
    4. #解压和编译 
    5. tar zxvf memcached-2.2.0.tgz 
    6. cd memcached-2.2.0 

    接下来开始编译:
     

    1. #注意已有php的实际路径 
    2. /usr/local/php/bin/phpize 
    3. ./configure --with-php-config=/usr/local/php/bin/php-config 
    4. make && make install 

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

    1. extension=memcached.so 

    Ps:找不到php.ini ? 很简单执行命令:php --ini 即可找到,不信你试试。

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

    1. php -m | grep memcached 

     

    如果输出memcached则表示成功。

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

    ③、测试缓存

     

    1. <?php 
    2. $m = new Memcached(); 
    3. $m->addServer( '127.0.0.1', 11211 ); 
    4. $m->set( 'foo', 100 ); 
    5. echo $m->get( 'foo' ) . "\n"

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

    三、WordPress缓存

    做完上述所有步骤,还只能说明系统环境已经支持了memcached缓存。下面我们还要将这个缓存用起来才行。

    1、埋坑警报

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

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

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

    2、安装插件

    所以,如果你一开始选择的是不带d的memcache,那么直接用WordPress官方的object-cache.php插件即可!如果你选择的是带d的memcached,那么这里就不能用官方的插件,而是要用github版本:

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

    在这里下载并解压得到的 object-cache.php,上传到 wp-content 目录即可开启memcached缓存。当然,不管是带d的还是不带d的,记得都是上传到wp-content目录。
     

    3、查看效果

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

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

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

     

    1. define('ADMIN_USERNAME','memcache');    // Admin Username 
    2. define('ADMIN_PASSWORD','password');    // Admin Password 
    3. define('DATE_FORMAT','Y/m/d H:i:s'); 
    4. define('GRAPH_SIZE',200); 
    5. define('MAX_ITEM_DUMP',50); 
    6.  
    7. $MEMCACHE_SERVERS[] = 'mymemcache-server1:11211'// add more as an array 
    8. $MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'// add more as an array 


    修改如下:

     

    1. define('ADMIN_USERNAME','memcache');    // Admin Username 登录名称,自行修改 
    2. define('ADMIN_PASSWORD','password');    // Admin Password 登录密码,自行修改 
    3. define('DATE_FORMAT','Y/m/d H:i:s'); 
    4. define('GRAPH_SIZE',200); 
    5. define('MAX_ITEM_DUMP',50); 
    6. //下面是定义memcached服务器,一般我们是单机部署,所以注释掉一行,并将服务器地址根据实际修改,比如本文是127.0.0.1 
    7. $MEMCACHE_SERVERS[] = '127.0.0.1:11211'// add more as an array 
    8. //$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array 

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

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

    4、更多设置

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

    1. global $memcached_servers
    2. $memcached_servers = array
    3.     array
    4.         '127.0.0.1'// Memcached server IP address 
    5.          11211        // Memcached server port 
    6.     ) 
    7. ); 

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

    1. netstat -nutlp | grep memcache 

    四、纯静态缓存

    实际上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中启用缓存:
     

    1. define('WP_CACHE', true); 

    3、参数调整

    1. var $max_age =  3600; // Expire batcache items aged this many seconds (zero to disable batcache) 
    2. var $remote  =    0; // Zero disables sending buffers to remote datacenters (req/sec is never sent) 
    3. var $times   =    2; // Only batcache a page after it is accessed this many times... (two or more) 
    4. var $seconds =  0; // ...in this many seconds (zero to ignore this and use batcache immediately) 

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

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

    来源:http://zhangge.net/5097.html

    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-103-3516-1.html