Як я можу програмно очистити кеш 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. ев
  7. config_api
  8. config_api2
  9. full_page

А їх можна повернути зателефонувавши Mage::app()->getCacheInstance()->getTypes()


3
Після програмного очищення кеша, цей коментар корисніший, ніж обрана відповідь. Оскільки важливо викликати dispatchEvent, мої Varnish ESI не очищали, поки я не додав виклик 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 за замовчуванням. Якщо вам потрібні додаткові роз'яснення, зверніться до наступного URL-адреси.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.