數據庫緩存 數據庫緩存類容許你把數據庫查詢結果保存在文本文件中以減小數據庫訪問。 激活緩存須要三步: 在服務器上建立一個可寫的目錄以便保存緩存文件。 在文件 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裏面刪除便可。注意: 這樣作並不能讓緩存文件當即消失,它將會自動過時並被刪除。若是你想當即刪除那些文件,就必須本身動手了。