CodeIgniter框架中启用和清除缓存的教程

九月 20, 2019 | views
Comments 0

CodeIgniter框架启动与缓存问题许多的新手都不知道如何来操作了,下面我们就一起来看一篇关于CodeIgniter框架中启用和清除缓存例子,具体如下所示。

Codeigniter支持缓存技术,以达到最快的速度。尽管CI已经相当高效了,但是网页中的动态内容、主机的内存CPU和数据库读取速度等因素直接影响了网页的加载速度。依靠网页缓存,你的网页可以达到近乎静态网页的加载速度,因为他们将程序输出的结果保存到硬盘上了。

缓存是怎么工作的?

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

注意:Benchmark标签在使用了缓存的页面仍然可用。

启动缓存:

启用缓存功能,只需要将下面的代码放入你的任何一个控制器(controller)的方法(function)内:

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

其中n是你希望缓存更新的分钟数。可以使用m/60来精确到秒,例如1/60,则是精确到1秒 上面的代码可以放到任何一个function里面。他的出现顺序对缓存并没有影响,所以将它放在你认为最合乎逻辑的地方。一旦上面的代码放到了控制器的方法中,页面就会被缓存。 警告:由于CI存储缓存文件的方式,只有通过view文件的输出才能被缓存。 注意:在缓存文件产生之前,请确保application/cache文件夹可写。

清除缓存:

如果你不再想使用缓存,仅需将上面的代码从你的controller里面删除即可。注意:这样做并不能让缓存文件立即消失,它将会自动过期并被删除。如果你想立即删除那些文件,就必须自己动手了。

可手动设置缓存开关。如果您想保留某些查询不被缓存 这个功能就十分有用。例如:

  1. // 打开缓存开关 
  2. $this->db->cache_on(); 
  3. $query = $this->db->query("SELECT * FROM mytable"); 
  4. // 使下面这条查询不被缓存 
  5. $this->db->cache_off(); 
  6. $query = $this->db->query("SELECT * FROM members WHERE member_id = '$current_user'"); 
  7. // Turn caching back on 
  8. $this->db->cache_on(); 
  9. $query = $this->db->query("SELECT * FROM another_table"); 

删除缓存文件与特定网页。如果你需要清除缓存后,更新您的数据库。

缓存系统会在缓存存放目录中建立与被访问的URL所对应的子目录,同时把缓存文件存放在那个子目录中.缓存主目录就是您在application/config/database.php 里面设置的缓存目录. 例如, 如果您正在浏览地址为 example.com/index.php/blog/comments的页面, 缓存系统会把所有生成的缓存文件放进一个以 blog+comments做为名称的文件夹里. 如果您要删除关于刚才提到的这个例子与之对应的缓存文件 需要执行以下代码:

$this->db->cache_delete('blog', 'comments');

$this->db->cache_delete('blog', 'comments'),我在实际测试的时候不起作用,不知道为什么原因,不知道是不是小bug?但是下面的$this->db->cache_delete_all()是可以的,没有问题。

如果您不使用任何参数,目前的URI设置将决定什么时候应该清除/更新 该缓存。

清除所有所有的缓存文件。例子:

$this->db->cache_delete_all();

缓存小记:

1.数据库缓存,数据库缓存主要是针对于SELECT查询:

  1. // 打开缓存开关 
  2. $this->db->cache_on(); 
  3. $query1 = $this->db->query("SELECT * FROM mytable"); 
  4. // 使下面这条查询不被缓存 
  5. $this->db->cache_off(); 
  6. $query2 = $this->db->query("SELECT * FROM members WHERE member_id = '$current_user'"); 
  7. // 再次打开缓存开关 
  8. $this->db->cache_on(); 
  9. $query3 = $this->db->query("SELECT * FROM another_table");   

这样query1和query3就被缓存在文件中了,缓存的路径根据您的URL而定,如example.com/index.php/blog/comments的页面, 缓存系统会把所有生成的缓存文件放进一个以 blog+comments做为名称的文件夹里. 如果您要删除关于刚才提到的这个例子与之对应的缓存文件 需要执行以下代码:

$this->db->cache_delete('blog', 'comments');//$this->db->cache_delete('blog', 'comments')#来删除缓存     如果要清除所有数据库缓存:

$this->db->cache_delete_all();    *其cache模式在于针对不同的uri就会生成cache文件,如果URL中参数不同,则 cache文件就会不同,从而产生了漏洞。如果访问者构建自动生成URI,不断向服务器发起请求,就会瞬间产生大量的垃圾文件,导致系统文件臃肿。

2.页面缓存

$this->output->cache(n); // 请确保application/cache可写,n 是你希望缓存更新的 分钟 数。可以使用 m/60 来精确到秒,例如 1/60 ,则是精确到 1秒

3.序例化缓存到文件

  1. $this->load->driver('cache'array('adapter' => 'apc''backup' => 'file')); 
  2.  
  3. if ( ! $foo = $this->cache->get('foo')) 
  4.  { 
  5.       echo 'Saving to the cache!<br />'
  6.       $foo = 'foobarbaz!'
  7.  
  8.      // Save into the cache for 5 minutes 
  9.       $this->cache->save('foo'$foo, 300); 
  10.  } 
  11.  
  12. echo $foo;



zend