2010-01-19 113 views
3

我打算在CakePHP中使用緩存。我想知道如果我更新了我的表上的數據會發生什麼,CakePHP會重新緩存我的數據嗎?關於在CakePHP中緩存的問題

在此先感謝!

回答

5

不是自動的,沒有。

無論您緩存的內容在到期前還是更新之後都不會更改。這就是緩存的一點。訣竅是定義一個適當的過期時間表和/或刪除/刷新緩存,當有什麼變化,你想立即反映。

假設你有一個博客,並且你需要緩存首頁,因爲它每次都會收到如此多的點擊,並且每次往返數據庫都會導致服務器關閉。無論何時創建或編輯博客文章,您都可以無限期地緩存頁面,清理緩存以強制更新。

或者,假設您顯示Twitter的職位,這是不斷更新的名單,但因爲Twitter規定的更新頻率的限制,則無法刷新他們每一次。在檢查新帖子之前,您需要使用時間有限的緩存,例如10分鐘。或者,比方說,從數據庫中拉出一些信息的純粹操作非常昂貴,所以你不想每次都這樣做,但是你總是需要最新的數據。在這種情況下,你做一個小的,便宜的查詢,以找出是否因爲你緩存它的最後一次數據已經改變(如取一定紀錄的modified時間戳字段),並根據這些信息決定是否啓動越貴操作或只使用緩存的數據。

特定策略取決於您的情況。

+1

這適用於僅查看緩存,但值得一提:「重要的是要記住,如果在緩存視圖中使用的模型被修改,Cake將清除***緩存視圖。 http://book.cakephp.org/view/348/Clearing-the-Cache – deizel 2010-01-20 16:27:27

+1

@deizel我用視圖緩存爲不幸的是這說明沒有工作的最後一次。也許它在最新版本中有。 – deceze 2010-01-20 23:15:18

2

有CakePHP中的幾種類型的高速緩存方法和高速緩存引擎: http://book.cakephp.org/view/156/Caching

我使用的是默認的文件緩存引擎。您可以配置您想要在core.php文件中緩存數據的時間。例如,我創建了一個'short'緩存和一個'long'緩存。

Cache::config('short', array(
    'engine' => 'File', 
    'duration'=> '+1 hours', 
    //'path' => CACHE, 
    //'prefix' => 'cake_short_' 
)); 

Cache::config('long', array(
    'engine' => 'File', 
    'duration'=> '+1 week', 
    'probability'=> 100, 
    //'path' => CACHE . 'long' . DS, 
)); 

所以每當你要讀取或寫入數據緩存,你可以指定這個配置的名字就知道多久緩存。更多信息:http://book.cakephp.org/view/767/Cache-write