Caching CakePHP缓存特定于用户的查询数据,最佳实践

Caching CakePHP缓存特定于用户的查询数据,最佳实践,caching,cakephp,model,memcached,cache-control,Caching,Cakephp,Model,Memcached,Cache Control,我希望在当前的web应用程序中使用模型级别的缓存 我对缓存一般的东西很熟悉,比如“最新消息”或者其他非用户特定的东西,我正在寻找一些关于缓存依赖于用户特定数据的查询的方向 例如,用户评论的列表。查询将需要用户ID,并且结果将仅特定于该用户,因此我应该如何缓存该用户ID 更重要的是,在更新注释时简单地清除整个缓存似乎效率很低,如果能得到一些关于如何清除特定于用户的缓存键的建议,那就太好了 范例 function getEntryByInventory($id,$company_id) { $g

我希望在当前的web应用程序中使用模型级别的缓存

我对缓存一般的东西很熟悉,比如“最新消息”或者其他非用户特定的东西,我正在寻找一些关于缓存依赖于用户特定数据的查询的方向

例如,用户评论的列表。查询将需要用户ID,并且结果将仅特定于该用户,因此我应该如何缓存该用户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\u id

我的问题是,我这样做是正确的吗?如果不是,请给我一些建议


提前谢谢

确保您最后而不是首先实现缓存。应用程序工作后,就可以开始缓存特定元素了。有些东西不值得缓存(你不能到处缓存所有用户的评论)。这里有储藏室。在尝试深入研究复杂的缓存之前,应该先消除瓶颈(其中大部分是直截了当的)。

确保您最后而不是首先实现缓存。应用程序工作后,就可以开始缓存特定元素了。有些东西不值得缓存(你不能到处缓存所有用户的评论)。这里有储藏室。在尝试深入研究复杂的缓存之前,最好先消除这两个瓶颈(其中大部分是直截了当的)。

如果使用
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']);
        }
    }
如果使用
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']);
        }
    }