Как программно очистить кэш Magento?

23

Я автоматизирую конфигурации релизов, загружая Mage в несколько скриптов релиза. В конце скриптов мне нужно очистить кеш Magento.

Есть ли способ очистить кеш, используя один из Mageклассов или методов?

STW
источник
1
попробуйте это: Mage :: app () -> cleanCache () или Mage :: app () -> getCacheInstance () -> flush ();
Стефан Грегори

Ответы:

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. EAV
  7. config_api
  8. config_api2
  9. Полная страница

И они могут быть возвращены по телефону Mage::app()->getCacheInstance()->getTypes()

Дэвид Мэннерс
источник
3
Этот комментарий более полезен, чем выбранный ответ, поскольку он пренебрегал программной очисткой кеша. Поскольку важно вызывать dispatchEvent, мои ESI Varnish не очищались, пока я не добавил вызов dispatchEvent. (Что, конечно, позволит другим модулям запускать свой код соответствующим образом)
Барри Карлион,
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
1
Magento имеет функцию, которая автоматически запускает обновления. Это срабатывает, когда кеш конфигурации должен быть перестроен. Если вам конкретно не нужна эта функция и тщательно ее кодируйте, вы вводите параллельный процесс, который вы или ваши коллеги, возможно, не ожидали.
Мелвин
1

Если вам действительно нужно очистить все хранилища кеша, используйте следующий код:

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

Здесь функция Flush вызывает стандартную функциональность magento cache, если вам нужны дополнительные пояснения, обратитесь к следующему URL.

/programming/15028159/magento-flush-cache-storage

Pasupathi Thangavel
источник