欢迎光临
屌丝博客

更改codeigniter中的output缓存到memcache

直接贴代码自己分析

重要说明,以下代码中的gc是单独写的获取配置文件的函数 请自行改为ci自带的获取配置文件方法
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * 缓存重写——改为存储在memcache
 * @author xiaole
 *
 */

class MY_Output extends CI_Output {
    
    public function __construct() {
        parent::__construct();
    }
    
    /**
    * 功能:写入缓存
    * @param 
    * @param 
    * @return 
    * @author xiaole
    * @time 2014-10-28下午4:12:19
    */
    function _write_cache($output){
        $CI =& get_instance();
        $CI->load->library('memcache', gc('mc'));
    
        $uri =    gc('base_url') . gc('index_page') . $CI->uri->uri_string();
        $cache_key = md5($uri);
         
        $CI->memcache->set($cache_key, $output,$this->cache_expiration * 60);
    }
    
    /**
    * 功能:更新缓存
    * @param 
    * @param 
    * @return 
    * @author xiaole
    * @time 2014-10-28下午4:19:59
    */
    function _display_cache(&$CFG, &$URI){
        
        //此处说明。本MC经过改动,适合我的项目用,如果是原生CI里面自带的MC 可不必include。
        //由于此方法不会实例化CI,所以此处不适合用get_instance(),请编程人员自行理解。
        include_once BASEPATH.'/libraries/Memcache.php';
        $mc = new CI_Memcache($CFG->item('mc'));
        
        $uri =    $CFG->item('base_url') . $CFG->item('index_page') . $URI->uri_string;
        $cache_key = md5($uri);
        
        $cache = $mc->get($cache_key);
        if( $cache === FALSE  ){ //缓存已过期
            return FALSE;
        }else{ //输出缓存
            $this->_display($cache);
            return TRUE;
        }
    }    
    
}