如何以编程方式刷新Magento的缓存?


23

我通过在几个发行脚本中引导Mage来自动化发行配置。在脚本的最后,我需要刷新Magento的缓存。

有没有一种使用Mage类或方法之一刷新缓存的方法?


1
试试这个:Mage :: app()-> cleanCache()或Mage :: app()-> getCacheInstance()-> flush();
Stefan Gregori 2014年

Answers:


25

请尝试以下代码以编程方式刷新缓存

Mage::app()->cleanCache()

要么

Mage::app()->getCacheInstance()->flush(); 

40

如果您确实需要,也可以只清除一种或多种缓存类型。这实际上是管理员部分的操作方式。下Mage_Adminhtml_CacheController::massRefreshAction

您可以看到它遍历所有参数types并调用以下命令

$tags = Mage::app()->getCacheInstance()->cleanType($type);
Mage::dispatchEvent('adminhtml_cache_refresh_type', array('type' => $type));
$updatedTypes++;

可能的类型如下:

  1. 配置
  2. 布局
  3. block_html
  4. 翻译
  5. 馆藏
  6. av
  7. config_api
  8. config_api2
  9. 完整页面

这些可以通过调用返回 Mage::app()->getCacheInstance()->getTypes()


3
在以编程方式支持缓存清除方面,此注释比所选答案更有用。由于调用dispatchEvent很重要,因此直到我添加dispatchEvent调用,我的Varnish ESI才被清除。(当然,这将允许其他模块相应地触发其代码)
Barry Carlyon

6

快速的外部脚本清除所有缓存:

<?php

require_once './app/Mage.php';
umask(0);
Mage::app('default');
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

try {
    $allTypes = Mage::app()->useCache();
    foreach($allTypes as $type => $value) {
        Mage::app()->getCacheInstance()->cleanType($type);
        Mage::dispatchEvent('adminhtml_cache_refresh_type', array('type' => $type));
        echo "{$type} </br>";
    }
    echo 'done';
} catch (Exception $e) {
    echo $e->getMessage();
}

3

我们可以使用n98-magerun。尤其是因为您永远不要在部署脚本执行期间刷新高速缓存。还可以查看sys:setup:incremental子命令,以更受控地执行Magento设置脚本。


您是否可以对语句“特别是因为在执行部署脚本期间永远不要刷新缓存”这样的陈述提供其他理解?
STW,2014年

1
Magento具有自动运行升级的功能。当必须重建配置缓存时,将触发此操作。除非您特别需要该功能并仔细编码,否则您将介绍您或您的同事可能未曾预料到的并行过程。
梅尔文2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.