Jak mogę programowo opróżnić pamięć podręczną Magento?


23

Automatyzuję konfiguracje wersji, ładując Mage'a w kilku skryptach wersji. Na końcu skryptów muszę opróżnić pamięć podręczną Magento.

Czy istnieje sposób na opróżnienie pamięci podręcznej przy użyciu jednej z Mageklas lub metod?


1
spróbuj tego: Mage :: app () -> cleanCache () lub Mage :: app () -> getCacheInstance () -> flush ();
Stefan Gregori

Odpowiedzi:


25

Wypróbuj następujący kod, aby programowo opróżnić pamięć podręczną

Mage::app()->cleanCache()

lub

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

40

Jeśli naprawdę tego chcesz, możesz wyczyścić tylko jeden lub więcej typów pamięci podręcznej. Tak właśnie robi to sekcja admin. PodMage_Adminhtml_CacheController::massRefreshAction

Możesz zobaczyć, że przechodzi przez wszystkie parametry typesi wywołuje następujące

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

Możliwe typy są następujące:

  1. config
  2. układ
  3. block_html
  4. Tłumaczyć
  5. kolekcje
  6. eav
  7. config_api
  8. config_api2
  9. pełna strona

Można je zwrócić, dzwoniąc Mage::app()->getCacheInstance()->getTypes()


3
Po programowym rozwodzeniu się nad czyszczeniem pamięci podręcznej ten komentarz jest bardziej przydatny niż wybrana odpowiedź. Ponieważ ważne jest, aby wywołać metodę dispatchEvent, moje ESI Varnish nie zostały wyczyszczone, dopóki nie dodałem wywołania dispatchEvent. (Co oczywiście pozwoli innym modułom odpowiednio odpalić swój kod)
Barry Carlyon

6

Szybki skrypt zewnętrzny, aby wyczyścić całą pamięć podręczną:

<?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

Nasz moglibyśmy użyć n98-magerun . Zwłaszcza, że ​​nigdy nie należy opróżniać pamięci podręcznej podczas wykonywania skryptów wdrażania. Zobacz także sys:setup:incrementalpodkomendę, aby lepiej kontrolować wykonywanie skryptów instalacyjnych Magento.


Czy możesz podać dodatkowy wgląd w swoje oświadczenie „Zwłaszcza, że ​​nigdy nie powinieneś opróżniać pamięci podręcznej podczas wykonywania skryptów wdrażania”?
STW

1
Magento ma funkcję, która automatycznie uruchamia aktualizacje. Jest to wyzwalane, gdy pamięć podręczna konfiguracji musi zostać przebudowana. O ile nie potrzebujesz tej funkcji i nie starannie ją kodujesz, wprowadzasz równoległy proces, którego ty lub twoi koledzy mogłeś nie przewidzieć.
Melvyn

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.