Codeigniter 入门(8)缓存

在这里主要介绍Codeigniter自带的数据库查询缓存,与文件缓存,像什么apc,memcached之类的,我也还没用到,因为我租的是虚拟空间,不是VPS,所以没用到,也就不想去学习了解了.哈哈。


1、先介绍数据库缓存

   我们看官方文档介绍

激活缓存需要三步:
  
在服务器上创建一个可写的目录以便保存缓存文件。
在文件 application/config/database.php 中$db['xxxx']['cachedir'] 设置其目录。
激活缓存特性,可以在文件 application/config/database.php 中设置全局选项$db['xxxx']['cache_on']='TRUE',也可以用以本页下面的方法手动设置。
一旦被激活,每一次含有数据库查询的页面被加载时缓存就会自动发生。

   好吧,我们这里说的是自动创建缓存

首先将application/config/database.php中的这二项指定

'cache_on' => TRUE,
'cachedir' => './cache',

cachedir指的是你application同级目录下的cache目录,如果不存在,则自己手动创建一个。然后点点我们分页功能,就可以看到



2、文件缓存

   先查看文档给的介绍

   

缓存是怎么工作的?
 
CI支持每个页面单独缓存,而且可以设置缓存更新时间。当一个网页第一次被加载的时候,缓存文件将被保存到application/cache文件夹。 下次访问的时候,系统就会直接读取缓存文件,然后返回给用户的浏览器。如果缓存文件过期,它将被删除并重新生成。

我们只需要在控制器的view前面加上


$this->output->cache(10);

就行了,然后点击运行就可以看到


当然我们可以做的更通用一点,比如自定一个配置项


//是否开启页面缓存,$this->output->cache(n);
$config["pagecache"]           =  FALSE;
#缓存时间,默认1个小时
$config["cachetime"]           =  60;

然后在我们的view前面进行判断

function My_load_view($url,$out_datas=null){
    $CI = &get_instance();
    if(config_item("pagecache")===TRUE){
        $CI->output->cache(config_item("cachetime"));
    }
    
    $CI->load->view($url, $out_datas);       
}

就可以了。文件缓存只要是通过

public function set_cache_header($last_modified, $expiration)
{
    $max_age = $expiration - $_SERVER['REQUEST_TIME'];
 
    if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $last_modified <= strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']))
    {
        $this->set_status_header(304);
        exit;
    }
    else
    {
        header('Pragma: public');
        header('Cache-Control: max-age=' . $max_age . ', public');
        header('Expires: '.gmdate('D, d M Y H:i:s', $expiration).' GMT');
        header('Last-modified: '.gmdate('D, d M Y H:i:s', $last_modified).' GMT');
    }
}

来实现..嗯,就这二个介绍的,收工