2011-05-04 50 views
1

我想在我正在使用的當前Web應用程序的模型級別使用緩存。CakePHP緩存用戶特定查詢數據,最佳實踐

我很喜歡緩存一般的東西,像「最新消息」或其他非用戶特定的事情,我正在尋找緩存查詢的一些方向,依賴於用戶特定的數據。

例如,用戶評論的列表。查詢將需要用戶ID,結果將只針對該用戶,那麼我應該如何緩存?

更重要的是,更新註釋時簡單地清除整個緩存看起來效率很低,最好能得到一些關於如何清除用戶特定緩存鍵的建議。

function getEntryByInventory($id,$company_id) { 
    $getEntryByInventory = Cache::read('Entry.getEntryByInventory.'.$id.'.'.$company_id); 
    if($getEntryByInventory !==false) { 
     return $getEntryByInventory; 
    } else {  
     $getEntryByInventory = $this->find('first' , array(
      'conditions' => array(
       'Entry.id' => $id, 
       'Inventory.company_id' => $company_id 
      ) 
     )); 
     Cache::write('Entry.getEntryByInventory.'.$id.'.'.$company_id , $getEntryByInventory); 
     return $getEntryByInventory; 
    } 
} 

// How would I clear the above cache without knowing the company id? 
function beforeSave() { 
    Cache::delete('????'); 
    return true; 
} 

我可以保存此查詢在緩存中的結果,並使其具體加上$ COMPANY_ID到緩存關鍵,所以讀取和寫入高速緩存是好的。

但在這種情況下,如果我需要從緩存中刪除此密鑰,我需要$ company_id。

我的問題是,我正在以正確的方式進行討論,如果沒有,我可以得到一些指示!

在此先感謝。

回答

1

確保最後不是先執行緩存。一旦你的應用程序工作,你就可以開始緩存特定的元素。有些東西只是不值得高速緩存(你無法緩存所有用戶的評論)。存儲就在那裏。在試圖深入研究複雜的緩存之前,我們的工作就是消除瓶頸(大多數情況會很簡單)。

0

如果您使用afterSave()功能代替beforeSave()功能,保存的數據/信息將在$this->data中可用。

public function afterSave($created, $options = array()) { 
     debug($this->data); // contains id of the modified record 
     if ($created) { 
      Cache::clear('Entry.getEntryByInventory.'.$this->data['Model']['id'].'.'.$this->data['Model']['company_id']); 
     } 
    }