WordPress for SAE 使用 Memcache

Reading time ~1 minute

本人使用的是SAE应用仓库中WordPress for SAE,使用应用安装包装的,没有在线装,查看了下版本号是3.4.1。

由于介绍中明确说明“轻量的Memcache缓存模块,加快网页显示速度的同时减少资源消耗,为您节省云豆”,于是在SAE中初始化了Memcache后便也没有在意,只是最近在查看资源报表的时候,发现Memcache只有内存消耗,请求次数始终是0,越想越觉得不对劲,于是便决定认真查一查。

本来之前都是大概看了眼,大家都是说官方的直接初始化了Memcache后就会自动启用了,但是这次既然决定认真查了,就专门查看了下mysql的请求次数,在footer中添加以下语句即可:

1
<?php echo get_num_queries();?> Queries. <?php timer_stop(1);?> Seconds

这一查果然就查出问题了,不管我是否初始化了Memcache,mysql的查询次数根本就没有变,这明显是不对劲的(话说其实如果Wordpress开启了Memcache,SAE不初始化Memcache的时候,网站会直接挂彩)。

于是乎,我看了下其它的WordPress在SAE上的移植版(非官方的应用仓库中的)对Memcache的处理,发现是用了一个Memcached Object Cache插件,将一个object-cache.php放在wp-content中来启用的Memcache。我便到我的SAE上的WordPress和官方的安装文件中找了下,果然就没有发现这个文件。

那么,不解释,赶快给自己的WordPress中加上了object-cache.php,然后mysql的查询次数果断就下来了,SAE后台统计的Memcache请求次数也不是0了,消耗的云豆终于不是0了(似乎第一次因为看到扣云豆了而高兴)~~~

PS:由于SAE上Memcache的使用方法稍有区别,不需要设置server,所以object-cache.php需要修改一下,将构造函数WP_Object_Cache()中的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
foreach ( $buckets as $bucket => $servers) {
    $this->mc[$bucket] = new Memcache();
    foreach ( $servers as $server  ) {
        list ( $node, $port ) = explode(':', $server);
        if ( !$port )
            $port = ini_get('memcache.default_port');
        $port = intval($port);
        if ( !$port )
            $port = 11211;
        $this->mc[$bucket]->addServer($node, $port, true, 1, 1, 15, true, array($this, 'failure_callback'));
        $this->mc[$bucket]->setCompressThreshold(20000, 0.2);
    }
}

修改成:

foreach ( $buckets as $bucket => $servers) {
    $this->mc[$bucket] = memcache_init();
}

也可以在网上找到别人已经修改好的SAE移植版,后面附件中也是修改好的。

本来至此,Memcache就已开启,只是由于本人使用的主题的问题,在进入后台时会出现如下错误:

Fatal error: ThemeUpdateChecker::injectUpdate() [themeupdatechecker.injectupdate]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "ThemeUpdate" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in wp-content/themes/clearision/func/theme-update-checker.php on line 182

检查了一下,发现是主题内置插件中:

1
2
3
4
5
6
7
8
9
<?php
public function injectUpdate($updates){
    $state = get_option($this->optionName);
    //Is there an update to insert?
    if ( !empty($state) && isset($state->update) && !empty($state->update) ){
        $updates->response[$this->theme] = $state->update->toWpFormat();
    }
    return $updates;
}

其中的$state->update是个__PHP_Incomplete_Class,虽然不知道为什么是在开启Memcache后才出现,但是既然只是检查更新的,那就注释了就好,至于以后还会不会出神马奇奇怪怪的问题,就不得而知了,但愿不会吧!

memcached.zip

挂载网络文件夹后网络故障时文件操作命令卡死

挂载 NFS 或者 Samba 的时候,经常会由于网络故障导致挂载好的链接断掉。此时如果尝试进行 ls、cd、df 等各种命令,只要与此目录沾上边,就会卡住。如果使用了类似 oh-my-zsh 这种配置的,只要在网络目录中,弹出命令提示符前就会直接卡住。这个时候第一反应就是...… Continue reading

路由折腾记 第四弹

Published on September 02, 2017