我有一个这样的查询:
$record=books::model()->cache(10000)->find('id=:id',array(":id"=>$id));
Yii 使用 CDbCache 将结果保存在缓存表中
id expire value
-- ------ ------
我的问题是:
如何在yii缓存表中获取缓存记录的id-这个id是yii生成的?
我有一个这样的查询:
$record=books::model()->cache(10000)->find('id=:id',array(":id"=>$id));
Yii 使用 CDbCache 将结果保存在缓存表中
id expire value
-- ------ ------
我的问题是:
如何在yii缓存表中获取缓存记录的id-这个id是yii生成的?
没有公开的方法来获取缓存 ID,因为它包含了很多变量,如果你真的想要,你可以,但在 Yii 的深处它真的很黑暗。
根据评论回答:
您始终可以在记录中设置最后缓存时间,然后您可以使用它来计算剩余时间。但这不会在页面跨度上持续存在,因为您的缓存会导致您不会再次读取它。所以你的选择是:
要回答这个问题。顺便提一下 Yii 代码的编写方式,你无法获取 YII 内部生成的 Cache 的 ID/Key。如果您查看源代码
https://github.com/yiisoft/yii/blob/1.1.16/framework/db/CDbCommand.php 方法查询内部
您会意识到cacheKey生成是一件复杂的事情。而且这个cacheKey会被MD5进一步Hash
参考:http ://www.yiiframework.com/doc/api/1.1/CCache#generateUniqueKey-detail
如果你使用 'cache' 作为 QueryBuilder 的一部分,那么我们通过提供 Expire Duration 和 Dependency Query 赋予 Yii 管理这个缓存的权力。
如果您想要控制/控制过期时间并想要拥有 ID,那么唯一的方法是按照用户 Paystey的建议手动设置 CacheID,如下所示:
$dbResult = Yii::app()->cache->get('YOUR-KNOWN-KEY');
if($dbResult === false){
$dbResult = YOUR-QUERY;
Yii::app()->cache->set('YOUR-KNOWN-KEY, $dbResult);
}