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

資料庫快取類別

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

重要

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

重要

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

啟用快取

啟用快取需要三步驟:

  • 在伺服器上建立一個可寫入的目錄以便保存快取檔案;
  • 透過檔案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教程有兴趣的朋友有所帮助。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
使用數據庫存儲會話的優點是什麼?使用數據庫存儲會話的優點是什麼?Apr 24, 2025 am 12:16 AM

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

您如何在PHP中實現自定義會話處理?您如何在PHP中實現自定義會話處理?Apr 24, 2025 am 12:16 AM

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

什麼是會話ID?什麼是會話ID?Apr 24, 2025 am 12:13 AM

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

您如何在無狀態環境(例如API)中處理會議?您如何在無狀態環境(例如API)中處理會議?Apr 24, 2025 am 12:12 AM

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。

您如何防止與會議有關的跨站點腳本(XSS)攻擊?您如何防止與會議有關的跨站點腳本(XSS)攻擊?Apr 23, 2025 am 12:16 AM

要保護應用免受與會話相關的XSS攻擊,需採取以下措施:1.設置HttpOnly和Secure標誌保護會話cookie。 2.對所有用戶輸入進行輸出編碼。 3.實施內容安全策略(CSP)限制腳本來源。通過這些策略,可以有效防護會話相關的XSS攻擊,確保用戶數據安全。

您如何優化PHP會話性能?您如何優化PHP會話性能?Apr 23, 2025 am 12:13 AM

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显著提升应用在高并发环境下的效率。

什麼是session.gc_maxlifetime配置設置?什麼是session.gc_maxlifetime配置設置?Apr 23, 2025 am 12:10 AM

theSession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceisesneededeededeedeedeededto toavoidperformance andunununununexpectedLogOgouts.3)

您如何在PHP中配置會話名?您如何在PHP中配置會話名?Apr 23, 2025 am 12:08 AM

在PHP中,可以使用session_name()函數配置會話名稱。具體步驟如下:1.使用session_name()函數設置會話名稱,例如session_name("my_session")。 2.在設置會話名稱後,調用session_start()啟動會話。配置會話名稱可以避免多應用間的會話數據衝突,並增強安全性,但需注意會話名稱的唯一性、安全性、長度和設置時機。

See all articles

熱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

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

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1

記事本++7.3.1

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

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),