2012-07-11 45 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