2012-08-17 68 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); 
}