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?

STW
źródło
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(); 
Stefan Gregori
źródło
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()

David Manners
źródło
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();
}
Renon Stewart
źródło
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.

Melvyn
źródło
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
1

Jeśli naprawdę musisz wyczyścić wszystkie magazyny pamięci podręcznej, użyj następującego kodu,

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

Tutaj funkcja Flush wywołuje domyślną funkcję pamięci podręcznej Magento. Jeśli potrzebujesz więcej wyjaśnień, sprawdź następujący adres URL.

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

Pasupathi Thangavel
źródło