Discuz WinCache + yac

服务器跑的Windows Server 2012R2,PHP v5.3.28。并不自带操作码缓存,因此使用wincache加速PHP执行。不过winCache自带User-data-cache缓存,这样导致Discuz默认选取其当作数据缓存。我这个实际情况里面出现了wincache 导致forum.php异常加载时间长。分析问题出在数据缓存失效了。可能是wincache的bug。后来发现鸟哥的yac无锁缓存单机情况下可能是比较理想的,因此使用yac做数据缓存同时配合wincache的操作码缓存。
用的是discuz X3.3,memory缓存中有yac的文件,但是默认不支持,折腾一番得到下面的结果:
(1)搜索discuz_memory.php,在构造函数中增加
$this->extension['yac'] = extension_loaded('Yac');
完整代码如下:

public function __construct() {
    $this->extension['redis'] = extension_loaded('redis');
    $this->extension['memcache'] = extension_loaded('memcache');
    $this->extension['apc'] = function_exists('apc_cache_info') && @apc_cache_info();
    $this->extension['xcache'] = function_exists('xcache_get');
    $this->extension['eaccelerator'] = function_exists('eaccelerator_get');
    $this->extension['wincache'] = function_exists('wincache_ucache_meminfo') && wincache_ucache_meminfo();
    //在此添加yac的支持
    $this->extension['yac'] = extension_loaded('Yac');
}

(2)同时在其init函数搜索foreach(array('apc', 'eaccelerator', 'xcache', 'wincache') as $cache),增加一项yac
完整代码如下:

public function init($config) {
    $this->config = $config;
    $this->prefix = empty($config['prefix']) ? substr(md5($_SERVER['HTTP_HOST']), 0, 6).'_' : $config['prefix'];
    if($this->extension['redis'] && !empty($config['redis']['server'])) {
            $this->memory = new memory_driver_redis();
            $this->memory->init($this->config['redis']);
            if(!$this->memory->enable) {
                $this->memory = null;
            }
        }
    if($this->extension['memcache'] && !empty($config['memcache']['server'])) {
        $this->memory = new memory_driver_memcache();
        $this->memory->init($this->config['memcache']);
        if(!$this->memory->enable) {
            $this->memory = null;
        }
    }
    //接上面所说我不用wincache的数据缓存了,因此删去了wincache
    foreach(array('apc', 'eaccelerator', 'xcache', 'yac') as $cache) { 
        if(!is_object($this->memory) && $this->extension[$cache] && $this->config[$cache]) {
            $class_name = 'memory_driver_'.$cache;
            $this->memory = new $class_name();
            $this->memory->init(null);
        }
    }
    if(is_object($this->memory)) {
        $this->enable = true;
        $this->type = str_replace('memory_driver_', '', get_class($this->memory));
    }
}

请注意使用之前正确添加了扩展。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值