Vymazanie vyrovnávacej pamäte v Magento

„Aký je rozdiel medzi tlačidlami „Vyprázdniť Magento Cache“ a „Vyprázdniť vyrovnávaciu pamäť“?

Túto otázku dostávame dosť často, že stojí za to urobiť o nej krátky blogový príspevok. Aby ste pochopili rozdiel medzi týmito dvoma možnosťami, je dôležité vedieť trochu o tom, ako funguje ukladanie do vyrovnávacej pamäte v Magente. Konkrétne ide o koncepty ID a označovanie.

V podstate „id“ z hľadiska ukladania do vyrovnávacej pamäte je jednoducho jedinečný reťazec používaný na identifikáciu záznamov vyrovnávacej pamäte v zdieľanom úložisku. „Značka“ vyrovnávacej pamäte je ďalší reťazec, ktorý sa používa na klasifikáciu rôznych typov údajov, ktoré vaša aplikácia ukladá do vyrovnávacej pamäte. V Magento rozlišujú značky medzi nasledujúcimi typmi vyrovnávacej pamäte:

  • Konfigurácia (súbory XML bez rozloženia)
  • Rozloženia (všetky tieto súbory XML v časti app/design/…)
  • Blokuje výstup HTML (bloky stránok, ako sú hlavičky, päty a popisy)
  • Preklady
  • Údaje o zbierkach
  • Typy a atribúty EAV (obmedzuje niektoré vyhľadávania v databáze)
  • Konfigurácia webových služieb

Pre ilustráciu sa pozrime na zoznam vyrovnávacích súborov z predvoleného obchodu Magento:

[shell]
$ ls var/cache/mage–0
mág—1ef_DB_PDO_MYSQL_DDL_catalog_product_index_price_idx_1
mág—1ef_DB_PDO_MYSQL_DDL_core_config_data_1
mág—1ef_LAYOUT_0183D2D163E71FE45BB4CE3F4045A71BD
mág—1ef_LAYOUT_0659E64C667F785D2436DB04EBCBEE12E
mág—1ef_LAYOUT_088A9AF9EA75F3D59B57387F8E9C7D7A6
mág—1ef_LAYOUT_0956CDEF59F213D48A2D1218CC2CD1E96
mág—1ef_LAYOUT_1013A059DA3EFFB6F31EB8ABA68D0469E
mág—1ef_LAYOUT_12D7604E9632FF8D14B782A248FCBD2E7
mág—1ef_LAYOUT_14E2F46FB273D9CEA54FDD1B14EB28645
mág—1ef_LAYOUT_16CD0CCB23CB5ABE6844B7E3241F0A751
mág—1ef_LAYOUT_1DC0705D40BBC39A32179EE8A85BEF5D7
mág—1ef_Zend_LocaleC_en_US_day_gregorian_format_wide_wed
mág—1ef_Zend_LocaleC_en_US_month_gregorian_format_wide_5
[/shell]

Ako vidíte, názvy súborov vyrovnávacej pamäte majú odlišný vzor. Implementácia Zend Cache od Magenta predponuje všetkým súborom „mage“, za ktorým nasleduje predpona id (technicky: prvé 3 znaky z md5 hashu cesty k vášmu adresáru app/atď./), za ktorým nasleduje tag cache a niektoré ďalšie identifikátory. Celá vec tvorí jedinečné ID pre konkrétny záznam cache.

Čítať:  Ako optimalizovať svoj obchod Magento 2

S týmito informáciami môžeme lepšie pochopiť, čo sa stane, keď vymažete vyrovnávaciu pamäť Magento na zadnej strane.

„Vypláchnuť Magento Cache“

Keď kliknete na „Flush Magento Cache“, Cache Controller zavolá metódu „flushSystemAction()“. Táto funkcia zase volá metódu „cleanCache()“ objektu Mage_Core_Model_App, ktorá následne volá metódu „clean($tags)“ v objekte Mage_Core_Model_Cache. Tu sú rozdiely medzi týmito dvoma metódami. Pozrime sa na definíciu tejto funkcie:

[php]
/**
* Vyčistite údaje vo vyrovnávacej pamäti podľa konkrétnej značky
*
* @param pole $tags
* @return bool
*/
verejná funkcia clean($tags=array())
{
$mode = Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG;
if (!empty($tags)) {
if (!is_array($tags)) {
$tags = array($tags);
}
$res = $this->_frontend->clean($mode, $this->_tags($tags));
} inak {
$res = $this->_frontend->clean($režim, pole(Mage_Core_Model_App::CACHE_TAG));
$res = $res && $this->_frontend->clean($mode, array(Mage_Core_Model_Config::CACHE_TAG));
}
vrátiť $res;
}
[/php]

Táto metóda volá objekt Zend Cache, na ktorý sa pozrieme o chvíľu. Najprv by som však chcel zdôrazniť, že táto metóda čistí všetky súbory vyrovnávacej pamäte, ktoré sa zhodujú s radom značiek alebo, ak sú prázdne, so značkami definovanými v Mage_Core_Model_App a Mage_Core_Model_Config. Toto nevyčistí celú vyrovnávaciu pamäť!

Predtým, ako sa pozrieme na definíciu funkcie Zend_Cache „clean()“, pozrime sa, čo sa stane, keď klikneme na ďalšie tlačidlo „Vyprázdniť vyrovnávaciu pamäť“.

„Vyprázdniť vyrovnávaciu pamäť“

Keď kliknete na toto tlačidlo, radič vyrovnávacej pamäte zavolá metódu „flushAllAction()“ a nie metódu „flushSystemAction()“, ktorú sme videli vyššie. Táto metóda zase získa objekt Cache z Mage_Core_Model_App podobný vyššie uvedenej metóde, ale namiesto volania „clean($tags)“ na objekte Cache volá „flush()“. Pozrime sa stručne na túto definíciu:

Čítať:  Príručka pre začiatočníkov k metódam dopravy Magento 2: Čo sú to & Ako začať

[php]
/**
* Vyčistite údaje vo vyrovnávacej pamäti podľa konkrétnej značky
*
* @return bool
*/
verejná funkcia flush()
{
$res = $this->_frontend->clean();
vrátiť $res;
}
[/php]

No, pozrite sa sem! Táto metóda volá rovnakú metódu Zend Cache ako vyššie uvedená metóda, s výnimkou jedného hlavného rozdielu: . Teraz sa pozrime na metódu Zend_Cache_Core::clean() a uvidíme, čo sa stane, keď jej nepoviete, čo má vyprázdniť:

[php]
/**
* Vyčistite položky vyrovnávacej pamäte
*
* Dostupné režimy sú:
* ‘all’ (predvolené) => odstrániť všetky položky cache ($tags sa nepoužíva)
* ‘staré’ => odstráňte príliš staré položky vyrovnávacej pamäte ($tags sa nepoužívajú)
* ‘matchingTag’ => odstrániť záznamy z vyrovnávacej pamäte zodpovedajúce všetkým daným značkám
* ($tags môže byť pole reťazcov alebo jeden reťazec)
* ‘notMatchingTag’ => odstráňte záznamy z vyrovnávacej pamäte, ktoré sa nezhodujú s jednou z daných značiek
* ($tags môže byť pole reťazcov alebo jeden reťazec)
* ‘matchingAnyTag’ => odstrániť záznamy z vyrovnávacej pamäte, ktoré zodpovedajú akýmkoľvek daným značkám
* ($tags môže byť pole reťazcov alebo jeden reťazec)
*
* @param string $mode
* @param pole|string $tags
* @throws Zend_Cache_Exception
* @return boolean Pravda, ak je v poriadku
*/
verejná funkcia clean($mode = ‘all’, $tags = array())
{
if (!$this->_options[‘caching’]) {
vrátiť true;
}
if (!in_array($mode, array(Zend_Cache::CLEANING_MODE_ALL,
Zend_Cache::CLEANING_MODE_OLD,
Zend_Cache::CLEANING_MODE_MATCHING_TAG,
Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG))) {
Zend_Cache::throwException(‘Neplatný režim čistenia’);
}
self::_validateTagsArray($tags);
return $this->_backend->clean($mode, $tags);
[/php]

Dokumentácia v tejto definícii funkcie je celkom dobrá. Tu môžete vidieť, že zatiaľ čo prvé tlačidlo – „Flush Magento Cache“ – sa pokúša zrušiť platnosť všetkých aktív uložených vo vyrovnávacej pamäti, ktoré zodpovedajú akejkoľvek značke odovzdanej v poli $tags, „Any“ je tu len obmedzená podmnožina položiek uložených vo vyrovnávacej pamäti. Keď však zavoláte metódu „clean()“ bez akýchkoľvek parametrov, ako to robí tlačidlo „Flush Cache Storage“, predvoleným správaním je odstránenie všetkých položiek vyrovnávacej pamäte bez ohľadu na značky.

Čítať:  Ako získať nové postavy v Genshin Impact

Tým z vás, ktorí používajú predvolenú vyrovnávaciu pamäť súborového systému s Magento, sa to môže zdať triviálne. Môžete jednoducho ísť dovnútra a manuálne „rm -rf var/cache/*“ vymazať vyrovnávaciu pamäť. Ale tí z vás, ktorí používajú alternatívne typy vyrovnávacej pamäte (xcache, memcached, apc, db, sqlite), „Flush Magento Cache“ možno nerobí to, čo chcete. Takže, keď všetko ostatné zlyhá a chcete si byť istí, že vyrovnávacia pamäť je úplne prázdna, kliknite na „Vyprázdniť vyrovnávaciu pamäť“.

Jedno varovanie, než sa rozlúčim, ak používate jeden z typov zdieľanej vyrovnávacej pamäte – napríklad dve rôzne aplikácie používajúce rovnakú inštanciu memcached – kliknutím na „Vyprázdniť vyrovnávaciu pamäť“ môžete odstrániť položky vyrovnávacej pamäte aj pre túto ďalšiu aplikáciu. Možno to nie je to, čo chcete, takže si dávajte pozor.

Nové Publikácie:

ODPORÚČANIE