目錄
数据库缓存
网页缓存
首頁 php教程 php手册 CodeIgniter的缓存机制与使用方法

CodeIgniter的缓存机制与使用方法

Jun 13, 2016 am 09:39 AM
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上的信息动态查询时(例如使用分页),每次查询的实例将创建自己的缓存文件。因此,经过很多次查询后,缓存文件的个数可能比你查询的次数还多。

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

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

// 打开缓存开关
$this->db->cache_on();
$query = $this->db->query("SELECT * FROM mytable");
// 使下面这条查询不被缓存
$this->db->cache_off();
$query = $this->db->query("SELECT * FROM members WHERE member_id = '$current_user'");
// Turn caching back on
$this->db->cache_on();
$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();
登入後複製

网页缓存

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

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

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

$this->output->cache(n);
登入後複製

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

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

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

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何在CodeIgniter中實作自訂中介軟體 如何在CodeIgniter中實作自訂中介軟體 Jul 29, 2023 am 10:53 AM

如何在CodeIgniter中實現自訂中間件引言:在現代的Web開發中,中間件在應用程式中起著至關重要的作用。它們可以用來執行在請求到達控制器之前或之後執行一些共享的處理邏輯。 CodeIgniter作為一個流行的PHP框架,也支持中間件的使用。本文將介紹如何在CodeIgniter中實作自訂中間件,並提供一個簡單的程式碼範例。中間件概述:中間件是一種在請求

MyBatis快取機制詳解:一文讀懂快取儲存原理 MyBatis快取機制詳解:一文讀懂快取儲存原理 Feb 23, 2024 pm 04:09 PM

MyBatis快取機制詳解:一文讀懂快取儲存原理引言在使用MyBatis進行資料庫存取時,快取是一個非常重要的機制,能夠有效減少對資料庫的訪問,提高系統效能。本文將詳細介紹MyBatis的快取機制,包括快取的分類、儲存原理和具體的程式碼範例。一、快取的分類MyBatis的快取主要分為一級快取和二級快取兩種。一級緩存一級緩存是SqlSession級別的緩存,當在

java快取機制有哪些 java快取機制有哪些 Nov 16, 2023 am 11:21 AM

java快取機制有記憶體快取、資料結構快取、快取框架、分散式快取、快取策略、快取同步、快取失效機制以及壓縮和編碼等。詳細介紹:1、記憶體緩存,Java的記憶體管理機制會自動快取經常使用的對象,以減少記憶體分配和垃圾回收的開銷;2、資料結構緩存,Java內建的資料結構,如HashMap、LinkedList、HashSet等,具有高效的快取機制,這些資料結構使用內部哈希表來儲存元素等等。

CodeIgniter中間件:加速應用程式的反應速度和頁面渲染 CodeIgniter中間件:加速應用程式的反應速度和頁面渲染 Jul 28, 2023 pm 06:51 PM

CodeIgniter中間件:加速應用程式的反應速度和頁面渲染概述:隨著網頁應用程式的複雜性和互動性不斷增長,開發人員需要使用更有效率和可擴展的解決方案來提高應用程式的效能和反應速度。 CodeIgniter(CI)是一種基於PHP的輕量級框架,提供了許多有用的功能,其中之一就是中間件。中間件是在請求到達控制器之前或之後執行的一系列任務。這篇文章將介紹如何使用

Golang中實作高效電商推薦演算法的快取機制。 Golang中實作高效電商推薦演算法的快取機制。 Jun 20, 2023 pm 08:33 PM

隨著電商業務的蓬勃發展,推薦演算法成為了各大電商平台競爭的關鍵之一。作為一門高效能、高效能語言,Golang在實作電商推薦演算法方面有著很大的優勢。但是,在實作高效推薦演算法的同時,快取機制也是一個不可忽視的問題。本文將介紹如何在Golang中實作高效電商推薦演算法的快取機制。一、為什麼需要快取機制在電商推薦演算法中,推薦結果的產生需要耗費大量的運算資源,對於高併發的電

解析MyBatis的快取機制:比較一級快取和二級快取的特性和用法 解析MyBatis的快取機制:比較一級快取和二級快取的特性和用法 Feb 25, 2024 pm 12:30 PM

MyBatis的快取機制解析:一級快取與二級快取的差異與應用在MyBatis框架中,快取是一個非常重要的特性,可以有效提升資料庫操作的效能。其中,一級快取和二級快取是MyBatis常用的兩種快取機制。本文將詳細解析一級快取與二級快取的差異與應用,並提供具體的程式碼範例進行說明。一、一級緩存一級緩存也被稱為本地緩存,它預設開啟且不可關閉。一級快取是SqlSes

在CodeIgniter框架中使用資料庫查詢建構器(Query Builder)的方法 在CodeIgniter框架中使用資料庫查詢建構器(Query Builder)的方法 Jul 28, 2023 pm 11:13 PM

在CodeIgniter框架中使用資料庫查詢建構器(QueryBuilder)的方法引言:CodeIgniter是一個輕量級的PHP框架,它提供了許多功能強大的工具和函式庫,方便開發人員進行Web應用程式開發。其中一個令人印象深刻的功能是資料庫查詢建構器(QueryBuilder),它提供了一種簡潔而強大的方法來建立和執行資料庫查詢語句。本文將介紹如何在Co

阿里雲端快取機制有哪些 阿里雲端快取機制有哪些 Nov 15, 2023 am 11:22 AM

阿里雲端快取機制有阿里雲Redis、阿里雲Memcache、分散式快取服務DSC、阿里雲Table Store、CDN等。詳細介紹:1、阿里雲Redis:阿里雲提供的分散式記憶體資料庫,支援高速讀寫和資料持久化。透過將資料儲存在記憶體中,可以提供低延遲的資料存取和高並發的處理能力;2、阿里雲Memcache:阿里雲端提供的高速緩存系統等等。

See all articles