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