CodeIgniter的缓存机制与使用方法

数据库缓存

数据库缓存类容许你把数据库查询结果保存在文本文件中以减小数据库访问。

激活缓存须要三步:

    在服务器上建立一个可写的目录以便保存缓存文件。
    在文件 application/config/database.php 中设置其目录。
    激活缓存特性,能够在文件 application/config/database.php 中设置全局选项,也能够用以本页下面的方法手动设置。

一旦被激活,每一次含有数据库查询的页面被加载时缓存就会自动发生。

当页面被浏览时CodeIgniter的查询缓存系统可以动态执行。若是缓存特性被激活,那么在此页面首次被加载时,数据库查询的结果对象将会被序列化并保存在你服务器的文本文件中。而页面再次被加载时缓存文件将会替代数据库查询。如此,在被缓存的页面中,你的数据库使用率会降至0。

只有 读类型(read-type) (SELECT) 查询会被缓存,由于只有这种查询会产生结果集。 写类型(Write-type) (INSERT, UPDATE, 等等) 查询,由于不会产生结果集,故缓存系统不对之进行缓存。

缓存文件不会过时,除非你删掉,不然任何被缓存了的查询会一直存在。缓存系统容许你按页面清除,或把全部缓存都清除掉。通常来讲,你能够在某些事件(好比向数据库添加了数据)发生时用下面的函数来清除缓存。

缓存可否得到性能增益,取决于不少因素。若是您有一个负荷不多而高度优化的数据库,你可能不会看到性能提高。 若是您的数据库正在大量使用,您可能会看到缓存后带来的性能提高,前提是你的文件系统是并无太多开销。在一些集群服务器环境,会出现这样的状况,由于文件系统的操做太过频繁,缓存没法正确生成。 在单一的服务器在共享的环境,高速缓存可能会是有益的。是否能有性能上的提高应还取决于您的数据库。这要看您的具体状况。

CI把每次查询的结果放置在本身的缓存文件里。根据你的控制器函数,缓存文件集将被进一步组织到子目录中。准确的话,子目录的名称由你的URI的前两段(控件器类名和函数名)决定。例如,假设你有一个控制器blog和一个comments函数,这个函数包括三个查询。缓存系统将建立一个叫作blog+comments的目录并在这个目录里建立三个缓存文件。当你根据URI上的信息动态查询时(例如使用分页),每次查询的实例将建立本身的缓存文件。所以,通过不少次查询后,缓存文件的个数可能比你查询的次数还多。

因为缓存文件不会过时,您须要在您的应用程序中写入删除缓存操做的代码。例如,假设您有一个博客,让用户发表评论。每当有新的评论被提交您必定但愿在某个控制器的方法中删除缓存文件与控制器的功能。你会发现以下两个删除功能的介绍,能够帮助您清除数据。

可手动设置缓存开关。若是您想保留某些查询不被缓存 这个功能就十分有用。例如:
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作为名称的文件夹里. 若是您要删除关于刚才提到的这个例子与之对应的缓存文件 须要执行如下代码:
1    $this->db->cache_delete('blog', 'comments');

$this->db->cache_delete('blog', 'comments'),我在实际测试的时候不起做用,不知道为何缘由,不知道是否是小bug?可是下面的$this->db->cache_delete_all()是能够的,没有问题。

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

清除全部全部的缓存文件。例子:
1    $this->db->cache_delete_all();
网页缓存

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

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

启用缓存功能,只须要将下面的代码放入你的任何一个控制器(controller)的方法(function)内:
1    $this->output->cache(n);

其中 n 是你但愿缓存更新的 分钟 数。可使用 m/60 来精确到秒,例如 1/60 ,则是精确到 1秒。上面的代码能够放到任何一个 function 里面。他的出现顺序对缓存并无影响,因此将它放在你认为最合乎逻辑的地方。一旦上面的代码放到了控制器的方法中,页面就会被缓存。

因为CI存储缓存文件的方式,只有经过 view 文件的输出才能被缓存。在缓存文件产生以前,请确保 application/cache 文件夹可写。

若是你再也不想使用缓存,仅需将上面的代码从你的controller里面删除便可。注意: 这样作并不能让缓存文件当即消失,它将会自动过时并被删除。若是你想当即删除那些文件,就必须本身动手了。
相关文章
相关标签/搜索