2

我有一个这样的查询:

$record=books::model()->cache(10000)->find('id=:id',array(":id"=>$id));

Yii 使用 CDbCache 将结果保存在缓存表中

id     expire      value 
--     ------      ------

我的问题是:

如何在yii缓存表中获取缓存记录的id-这个id是yii生成的?

4

2 回答 2

1

没有公开的方法来获取缓存 ID,因为它包含了很多变量,如果你真的想要,你可以,但在 Yii 的深处它真的很黑暗。

根据评论回答:

您始终可以在记录中设置最后缓存时间,然后您可以使用它来计算剩余时间。但这不会在页面跨度上持续存在,因为您的缓存会导致您不会再次读取它。所以你的选择是:

  • 手动进行缓存,并将时间存储在要用于计算的对象上
  • 或者存储会话中提取的每个 ID 的时间,并使用它来计算它。
于 2012-08-17T10:02:58.640 回答
0

要回答这个问题。顺便提一下 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);
}
于 2015-05-12T08:24:37.757 回答