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


23

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

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


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.