?
This document uses PHP Chinese website manual Release
數(shù)據(jù)庫緩存類允許您將查詢緩存為文本文件,以減少數(shù)據(jù)庫負載。
重要
當啟用緩存時,該類由數(shù)據(jù)庫驅動程序自動初始化。不要手動加載這個類。
重要
使用緩存時,并非所有查詢結果函數(shù)都可用。請仔細閱讀這一頁。
緩存分三個步驟啟用:
在您的服務器上創(chuàng)建一個可寫目錄,在那里可以存儲緩存文件。
在應用程序/config/database.php文件中設置緩存文件夾的路徑。
通過在application/config/database.php文件中設置首選項,或者手動地啟用緩存特性,如下所述。
一旦啟用,每當加載包含數(shù)據(jù)庫查詢的頁面時,緩存將自動發(fā)生。
CodeIgniter的查詢緩存系統(tǒng)在查看頁面時動態(tài)發(fā)生。啟用緩存時,首次加載網(wǎng)頁時,查詢結果對象將被序列化并存儲在服務器上的文本文件中。下一次加載頁面時,將使用緩存文件而不是訪問數(shù)據(jù)庫。對于已緩存的任何頁面,您的數(shù)據(jù)庫使用率可以有效地降至零。
只有讀取類型(SELECT)查詢可以被緩存,因為這些是產(chǎn)生結果的唯一類型的查詢。寫入類型(INSERT,UPDATE等)查詢,因為它們不生成結果,不會被系統(tǒng)緩存。
緩存文件不會過期。任何已被緩存的查詢將保留緩存,直到您將其刪除。緩存系統(tǒng)允許您清除與單個頁面關聯(lián)的緩存,或者可以刪除整個緩存文件集合。通常情況下,您需要使用下面介紹的內務管理功能在發(fā)生特定事件后刪除緩存文件,例如在將新信息添加到數(shù)據(jù)庫時。
由于緩存而獲得性能增益取決于許多因素。如果您的負載非常輕微,并且具有高度優(yōu)化的數(shù)據(jù)庫,那么您可能看不到性能提升。如果你的數(shù)據(jù)庫被大量使用,你可能會看到一個改進的響應,假設你的文件系統(tǒng)沒有過度征稅。請記住,緩存只會改變您的信息檢索方式,將其從數(shù)據(jù)庫操作轉移到文件系統(tǒng)。
例如,在一些集群服務器環(huán)境中,由于文件系統(tǒng)操作非常激烈,緩存可能是有害的。在共享環(huán)境中的單個服務器上,緩存可能會有所幫助。不幸的是,你是否應該緩存數(shù)據(jù)庫的問題沒有單一的答案。這真的取決于你的情況。
CodeIgniter將每個查詢的結果放入它自己的緩存文件中。緩存文件集進一步組織到與您的控制器功能相對應的子文件夾中。確切地說,子文件夾的名稱與您的URI的前兩個段(控制器類名稱和函數(shù)名稱)的名稱完全相同。
例如,假設您有一個名為blog的控制器,其中包含一個名為comments的函數(shù),其中包含三個查詢。緩存系統(tǒng)將創(chuàng)建一個名為blog + comments的緩存文件夾,其中將寫入三個緩存文件。
如果您使用基于URI中信息更改的動態(tài)查詢(例如,在使用分頁時),則查詢的每個實例都將生成自己的緩存文件。因此,有可能最終獲得的緩存文件比查詢多得多。
由于緩存文件不會過期,因此您需要在應用程序中創(chuàng)建刪除例程。例如,假設您有一個允許用戶評論的博客。無論何時提交新評論,您都需要刪除與提供評論的控制器功能相關聯(lián)的緩存文件。您會發(fā)現(xiàn)下面介紹的兩個刪除功能,可幫助您清除數(shù)據(jù)。
最后,我們需要指出,被緩存的結果對象是完整結果對象的簡化版本。出于這個原因,一些查詢結果函數(shù)不可用。
當使用緩存的結果對象時,下列函數(shù)不可用:
NUM_FIELDS()
FIELD_NAMES()
field_data()
free_result()
此外,兩個數(shù)據(jù)庫資源(result_id和conn_id)在緩存時不可用,因為結果資源僅與運行時操作有關。
手動啟用/禁用緩存。如果你想保持某些查詢不被緩存,這會很有用。例:
// Turn caching on $this->db->cache_on(); $query = $this->db->query("SELECT * FROM mytable"); // Turn caching off for this one query $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");
刪除與特定頁關聯(lián)的緩存文件。如果您需要在更新數(shù)據(jù)庫后清除緩存,這是非常有用的。
緩存系統(tǒng)將緩存文件保存到與您正在查看的頁面的URI相對應的文件夾。例如,如果您正在example.com/index.php/blog/comments上查看頁面,則緩存系統(tǒng)會將與其關聯(lián)的所有緩存文件放在名為blog + comments的文件夾中。要刪除您將使用的特定緩存文件:
$this->db->cache_delete('blog', 'comments');
如果不使用任何參數(shù),則在確定應清除哪些內容時將使用當前URI。
清除所有現(xiàn)有的緩存文件。例子:
$this->db->cache_delete_all();