2012-08-17 73 views
2

我有这样的查询:得到保存记录的Yii DB缓存ID缓存表

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

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

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

我的问题是:

如何获得缓存记录的id - 这个id是由yii生成的 - in yii cache table?

回答

1

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

回答基于评论:

你总是可以设置一个最后的缓存时间对你的记录,然后你可以用它来计算剩余时间。但是,这不会持续页面跨度,因为您的缓存结果,它不会再读取。所以,你的选择是:

  • 手动执行缓存和存储对对象的时间用于计算
  • 或存储在会话拉到每个ID的时间,并用它来计算。
+0

谢谢你但我认为这与我的问题无关。如何在查询中的缓存表中获取已保存记录的ID。这是我的问题。? – shayan 2012-08-17 10:10:16

+0

我认为你的意思是找到身份证,这样你就可以删除记录,这就是它的作用。你为什么需要这个ID? Yii如何生成这些ID存在逻辑,但依赖这些数据是正确的或甚至存在是非常危险的。 – Paystey 2012-08-17 10:11:41

+0

我想知道缓存何时到期并使用剩余时间到期。 – shayan 2012-08-17 10:14:38

0

回答这个问题。顺便说一句,Yii代码的编写,你不能得到YII内部产生的缓存的ID /密钥。 如果你看看源代码

https://github.com/yiisoft/yii/blob/1.1.16/framework/db/CDbCommand.php 方法queryInternal

你会意识到cacheKey生成是复杂的事情。此外,这种cacheKey将进一步通过MD5

被散列参见:http://www.yiiframework.com/doc/api/1.1/CCache#generateUniqueKey-detail

如果您正在使用“高速缓存”作为的QueryBuilder的一部分,那么我们给权力的Yii通过提供管理这个缓存过期持续时间和依赖性查询。

如果你想在命令/的到期期限,并希望有ID控制,那么唯一的方法就是手动设置CacheID用户的建议 Paystey为belowt:

$dbResult = Yii::app()->cache->get('YOUR-KNOWN-KEY'); 
if($dbResult === false){ 
    $dbResult = YOUR-QUERY; 
    Yii::app()->cache->set('YOUR-KNOWN-KEY, $dbResult); 
}