2012-07-11 59 views
1

需要一些幫助來澄清概念。yii緩存和couchbase

$sql = 'SELECT * FROM tbl_post LIMIT 20'; 
$dependency = new CDbCacheDependency('SELECT MAX(update_time) FROM tbl_post'); 
$rows = Yii::app()->db->cache(1000, $dependency)->createCommand($sql)->queryAll(); 

1.如果緩存包含由SQL語句索引的條目。

2.如果依賴關係沒有改變(最大update_time值與查詢結果保存在緩存中時相同)。

我不明白上面的解釋是什麼意思。尤其是關於update_time最大值的第二個。如果我錯了,請糾正我。

tbl_post表中有一個update_time列。每當更新行時,update_time也會更新。如果從緩存中檢索帖子,CDbCacheDependency將首先查詢數據庫中的MAX(update_time)?這樣做的目的是什麼?它在保持緩存更新的過程中究竟有什麼作用?

另一個問題是關於memcache。我知道可以對內存緩存服務器進行集羣。假設我有以下配置。

1美國的memcache服務器。 1歐洲的memcache服務器。

我的Yii網站利用2個節點的集羣。 memcache將拆分2個節點之間的緩存。

1.user A從數據庫中檢索一個帖子並對其進行緩存。假設(123,$模型)在美國節點。

2.用戶B想要從歐洲找回相同的帖子。將尋找密鑰123找到緩存?如果兩個用戶都在美國或歐洲,是否重要?

謝謝!

回答

1

第一次運行後--DB組件將它放到s result into cache. Also it puts there result of dependency-query (max update time in your case). Then when your try to get data, db component executs dependency query and compare it with cached one. If dependency is unchanged (there is no new post s),它從緩存中獲得查詢結果,在其他情況下它執行查詢。

+0

因此,依賴性有助於保存數據庫查詢,而犧牲每次執行另一個短的查詢? 如果查詢很複雜,我認爲有顯着的節省,但否則,依賴並沒有多大幫助? 有沒有更好的辦法,通過取消依賴查詢? – twb 2012-07-12 06:00:19

+0

在大多數情況下,您不需要依賴關係。只有當你真的需要新的數據時,你才應該使用它 – sl4mmer 2012-07-12 13:55:44

+0

順便說一句 - 如果我的回答很有用,你可以投票,或將其標記爲解決方案 – sl4mmer 2012-07-12 13:57:26