Magento缓存 - 清除缓存的规则

Rod*_*Rod 10 caching magento

我尝试缓存显示菜单的块(例如来自Cmssmart_megamenu的模块).

以前的版本是:

<block type="megamenu/navigation"  name="catalog.topnav.megamenu">
    <action method="unsetData"><key>cache_lifetime</key></action>
    <action method="unsetData"><key>cache_tags</key></action>
</block>
Run Code Online (Sandbox Code Playgroud)

所以作者明确地禁用了缓存.我删除了2 unsetData,并在Cmsmart_Megamenu_Block_Navigation类中添加了_construct()方法.

class Cmsmart_Megamenu_Block_Navigation extends Mage_Catalog_Block_Navigation
{

protected function _construct()
  $this->addData(array(
    'cache_lifetime' => 86400,
    'cache_key'      => "my_key_mega_menu",
    'cache_tags'        => array(Mage_Catalog_Model_Category::CACHE_TAG, Mage_Cms_Model_Block::CACHE_TAG)
));
Run Code Online (Sandbox Code Playgroud)

听起来它有效,我可以看到缓存文件:mage --- 8ea_MY_KEY_MEGA_MENU.在var/cache中.但是,它会在一分钟后从缓存中消失.实际上,一旦下一个cron启动(每隔mn安排一次)

我使用了Aoe-template_hint,我可以看到这个块的绿色框,这意味着它被缓存,生命周期也正确设置为86400,所以有什么不对?

这是我的第一次尝试,你觉得这里有什么不对?是否有其他规则而不是文件的持续时间到期?也许与另一个块的隐藏链接会更快到期?不到1毫米的缓存是奇怪的...

注意:我在Windows或Linux上有相同的问题,有或没有Redis

谢谢

Rod*_*Rod 1

经过更多调查,我找到了为什么我的块的缓存被删除。

我搜索了对清理缓存的方法的调用,发现这是由于一个模块实际上通过执行以下操作显式删除了每个 cron 上的所有缓存块:

Mage::app()->getCacheInstance()->cleanType('block_html');
Run Code Online (Sandbox Code Playgroud)

我把线去掉了,现在一切顺利!该模块是 async_index