首頁 > 後端開發 > php教程 > [codeigniter 五]、查詢快取

[codeigniter 五]、查詢快取

WBOY
發布: 2016-07-30 13:31:39
原創
947 人瀏覽過

資料庫快取類別

資料庫快取類別允許你把資料庫查詢結果保存在文字檔案中以減少資料庫存取。

重要

當快取啟用時,本類會被資料庫驅動自動載入,切勿手動載入。

重要

並非所有查詢結果都能被緩存,請仔細閱讀本頁內容。

啟用快取

啟用快取需要三步驟:

  • 在伺服器上建立一個可寫入的目錄以便保存快取檔案;
  • 透過檔案application/config/database.php 中的快取檔案;
  • 透過檔案application/config/database.php 中的 cachedir 參數設定其目錄路徑;
透過將檔案application/config/database.php 中的cache_on 參數設定為TRUE,也可以用下面的方法手動設定。

快取一旦啟用,每一次載入頁面時,只要該頁面含有資料庫查詢就會自動快取起來。

快取是如何運作的?

當你在造訪頁面時,CodeIgniter 的查詢快取系統會自動運作。如果快取被啟用,當頁面第一次載入時,查詢結果物件會被序列化並保存到伺服器上的一個文字檔案中。當下次再造訪該頁面時,會直接使用快取檔案而不用存取資料庫了,這樣,在已快取的頁面,你的資料庫存取會降為 0 。

只有讀取類型(SELECT)的查詢可以被緩存,因為只有這類查詢才會產生結果。寫入類型的查詢(INSERT、UPDATE 等)並不會產生結果,所以不會被快取。

快取檔案永不過期,所有的查詢只要快取下來以後除非你刪除它們否則將一直可用。你可以針對特定的頁面來刪除緩存,或者也可以清空掉所有的快取。一般來說,你可以在某些事件發生時(如資料庫中加入了資料)用下面的函數來清除快取。

快取能夠提升網站的效能嗎?

快取能否獲得效能增益,取決於許多因素。如果你有一個低負荷而高度優化的資料庫,你可能不會看到效能的提升。而如果你的資料庫正在被大量訪問,您可能會看到快取後的性有所提升,前提是你的檔案系統並沒有太多的開銷。要記住一點的是,快取只是簡單的改變了資料取得的途徑而已,從存取資料庫變成了存取檔案系統。

例如,在某些叢集伺服器環境中,由於檔案系統的操作太過頻繁,快取其實是有害的。在共享的單一伺服器環境中,快取才可能有益。不幸的是,關於是否需要快取你的資料庫這個問題並沒有唯一的答案,這完全取決於你的情況。

快取檔案是如何儲存的?

CodeIgniter 將每個查詢快取到它單獨的快取檔案中,根據所呼叫的控制器方法快取檔案被進一步組織到各自的子目錄中。更精確的說,子目錄是使用你 URI的前兩段(控制器名稱 和 方法名)命名的。

例如,你有一個 blog 控制器和一個 comments 方法,並含有三個不同的查詢。快取系統將建立一個名為 blog+comments 的目錄,並在該目錄下產生三個快取檔案。

如果你的URI 中含有動態查詢時(例如使用分頁時),每個查詢實例都會生成它單獨的快取文件,因此,最終可能會出現快取文件數是你頁面中的查詢次數的好幾倍這樣的情況。

管理你的快取檔案

由於快取檔案不會過期,那麼你的應用程式中應該有刪除快取的機制,例如,我們假設你有一個部落格並允許使用者評論,每當提交一個新評論時,你都應該刪除掉關於顯示評論的那個控制器方法對應的快取檔案。以下將介紹有兩種不同的方法用來刪除快取資料。

不是所有的資料庫方法都相容於快取

最後,我們必須得指出被快取的結果對像只是一個簡化版的結果對象,正因為這樣,有幾個查詢結果的方法無法使用。

    下面列出的方法是無法在快取的結果物件上使用的:
  • num_fields()
  • field_names()
  • field_data()
free_result()

field_data()

free_result()

id 也無法使用,因為這兩個id只適用於即時的資料庫操作。

函數參考


$this->db->cache_on() / $this->db->cache_off()

用於手動啟用/禁用緩存,當你不想緩存某些查詢時,這兩個方法會很有用。範例:

// 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");
登入後複製

$this->db->cache_delete()


刪除特定頁面的快取文件,這當你更新你的資料庫之後需要清除快取時很有用。

🎜快取系統根據你造訪頁面的URI 來將快取寫入到對應的快取檔案中去,例如,如果你在造訪example.com/index.php/blog/comments 這個頁面,快取系統會將快取檔案保存到blog+comments 目錄下,要刪除這些快取文件,你可以使用:🎜🎜
$this->db->cache_delete('blog', 'comments');
登入後複製
🎜🎜

如果你没提供任何参数,将会清除当前 URI 对应的缓存文件。

$this->db->cache_delete_all()

清除所有的缓存文件,例如:

$this->db->cache_delete_all();
登入後複製

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了[codeigniter 五]、查询缓存,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板