关于CDbCacheDependency的问题?


var_dump($sql);


$dataToExcel = Yii::app()->cache->get('dataToExcel');

if($dataToExcel === false)

{

    $dataToExcel = call_logs::model()->findAll($criteria);

    Yii::app()->cache->set('dataToExcel', $dataToExcel, 600, new CDbCacheDependency($sql));

    var_dump('false');

}

else

{

    var_dump('true');

}

我打印出sql语句,变化了(同时也使得它引起的查询结果也发生了变化),说明db依赖的条件发生了变化了,这时应该重新生成数据,而不是从缓存中获取;

那么get()方法返回的应该是false,可是在这里测试时,发现sql语句变化了,可还是打印true,也即是说是从缓存中取得了数据,这样缓存依赖没有起到应有的作用?

我希望他们在导出excel时,去用缓存的数据,而不是重新查询,可是用户有可能不需要前一个查询的数据而是后面的查询数据,这是过期时间已经不能满足需要了,否则导出的是前一个查询的数据,所以我要加上db依赖,可现在db依赖没有效果了

你的SQL是什么?API文档写的不够清楚(已经改进了),这里的SQL必须返回一个单值。CDbDependency是根据这个单值的变化与否判断的。

首先要感谢的帮助,但我可能还有几个迷惑;

sql是个单值,是指sql应该是固定不变的字符串常量,还是指结果集是个单值?

如果sql是固定不变的字符串常量,

我可不可以这样理解:

在设置db依赖时,缓存系统会维护这样一个缓存ID与sql的索引,在下次从缓存中获取数据时根据缓存ID找到sql语句,根据sql语句执行一次查询,再和缓存中数据进行对比,作出判断?

CDbDependency是根据这个单值的变化与否判断的。

恕我愚钝:单值在这里指? :-[

你理解得基本没错。比如要cache最近10个帖子的列表,那么这个sql可以是选择最近的更改时间。如果它变化了,就说明有新贴了。