1

需要一些帮助来澄清这个概念。

$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值与查询结果保存在缓存中时相同)。

我不明白上面的解释是什么意思。特别是关于最大更新时间的第二个。如果我错了,请纠正我。

tbl_post 表中有一个 update_time 列。每当更新一行时,update_time 也会更新。如果从缓存中检索到帖子,CDbCacheDependency 将首先在数据库中查询 MAX(update_time)? 这样做的目的是什么以及它在保持缓存更新方面究竟是如何工作的?

另一个问题是关于内存缓存的。我知道可以集群 memcache 服务器。假设我有以下配置。

美国有 1 个内存缓存服务器。欧洲的 1 个内存缓存服务器。

我的 Yii 网站使用了 2 个节点的集群。memcache 将在 2 个节点之间拆分缓存。

1.用户A从数据库中检索一个帖子并缓存它。假设 (123,$model) 在美国节点。

2.用户 B 想从欧洲检索相同的帖子。查找密钥 123 会找到缓存吗?两个用户都在美国还是欧洲有关系吗?

谢谢!!

4

1 回答 1

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 posts) 它从缓存中获取查询结果,在其他情况下它执行查询。

于 2012-07-11T09:37:50.853 回答