清除Zend缓存的模式



我开始使用Zend缓存(APC后端),在返回缓存值而不是每次访问数据库方面一切都很好。然而,这是我的问题:

$cache_key = 'getrebates_'.$operator_code;
if(PP_Model_CacheService::exists($cache_key)) {
    $cached_values = PP_Model_CacheService::load($cache_key);
} else {
   //hits the db    
   $cached_values = $this->getAll($operator_code);
   PP_Model_CacheService::save($cached_values, $cache_key);
}
return $cached_values;

每个经营者都有自己的回扣,不同的经营者有不同的回扣,现在如果我改变数据库,需要清除所有经营者的回扣,我该怎么做?

我可以使用$Cache->clean(),但这将清除其他缓存(不仅仅是每个操作符的回扣缓存)。如果循环遍历所有操作符:

foreach($operator_codes AS $operator_code) {
   $cache_key = 'getrebates_'.$operator_code;
   $cache->delete($cache_key)
}

对于缓存来说似乎有很多工作要做。有没有办法只清除一部分缓存

//Something like:
$section_key = 'getrebates';
$Cache[$section_key][$operator_code];
$Cache->clearSection($section_key);

是否有任何数组结构的APC缓存或它是所有的缓存键/值为基础?

可以对缓存中存储的值应用标记。这样你就可以很容易地删除所有带有特定标签的缓存条目。

$cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB'));
// clear all cache entries with tag tagA or tagC
$cache->clean(
  Zend_Cache::CLEANING_MODE_MATCHING_TAG,
  array('tagA', 'tagC')
);

有关Zend_Cache_Core的clean方法的详细信息,请参阅此页:http://framework.zend.com/manual/en/zend.cache.theory.html和API: http://framework.zend.com/apidoc/1.11/

@theduke是对的,标记是正确的方法,除了APC,因为Zend_Cache_Backend_Apc不支持标记。来自文档:

注意:在这个后端,"tags"暂时不支持

从你最后的评论来看,你似乎在使用APC作为后端。因此,要么扩展这个类并添加Tag行为(通过在标记标识符中添加特殊语法?通过处理标签与缓存条目映射在其他地方?

相关内容

  • 没有找到相关文章

最新更新