Quelle est la différence entre les boutons « Vider le cache de Magento » et « Vider le stockage du cache » ?
Vider le cache dans Magento
Nous recevons cette question assez souvent pour qu’il vaille la peine d’y consacrer un court article de blog. Afin de comprendre la différence entre ces deux options, il est important de connaître un peu le fonctionnement de la mise en cache dans Magento. Cache tags laravel. En particulier les concepts d’ids et de tagging.
Essentiellement, un « id » en termes de mise en cache est simplement une chaîne unique utilisée pour identifier les enregistrements de cache dans un stockage partagé (Cache tags akamai). Un « tag » de cache est une autre chaîne utilisée pour classer les différents types de données que votre application met en cache. Dans Magento, les balises différencient les types de cache suivants :
- Configuration (fichiers XML sans mise en page)
- Mises en page (tous ces fichiers XML sous app/design/ ?)
- Blocs Sortie HTML (Blocs de page comme les en-têtes, les pieds de page et les appels)
- Traductions
- Données sur les collections
- Types et attributs de VAE (réduit certaines recherches dans la base de données)
- Configuration des services Web
Examinons la liste des fichiers de cache d’une boutique Magento par défaut à titre d’illustration :
$ ls var/cache/mage?0
mage?1ef_DB_PDO_MYSQL_DDL_catalog_product_index_price_idx_1
mage?1ef_DB_PDO_MYSQL_DDL_core_config_data_1
mage?1ef_LAYOUT_0183D2D163E71FE45BB4CE3F4045A71BD
mage?1ef_LAYOUT_0659E64C667F785D2436DB04EBCBEE12E
mage?1ef_LAYOUT_088A9AF9EA75F3D59B57387F8E9C7D7A6
mage?1ef_LAYOUT_0956CDEF59F213D48A2D1218CC2CD1E96
mage?1ef_LAYOUT_1013A059DA3EFFB6F31EB8ABA68D0469E
mage?1ef_LAYOUT_12D7604E9632FF8D14B782A248FCBD2E7
mage?1ef_LAYOUT_14E2F46FB273D9CEA54FDD1B14EB28645
mage?1ef_LAYOUT_16CD0CCB23CB5ABE6844B7E3241F0A751
mage?1ef_LAYOUT_1DC0705D40BBC39A32179EE8A85BEF5D7
mage?1ef_Zend_LocaleC_fr_US_day_gregorian_format_wide_wed
mage?1ef_Zend_LocaleC_fr_US_month_gregorian_format_wide_5
Comme vous pouvez le voir, il y a un schéma distinct dans les noms des fichiers de cache. Cache tags drupal. L’implémentation de Zend Cache par Magento préfixe tous les fichiers par « mage », suivi d’un préfixe id (techniquement : les 3 premiers caractères d’un hash md5 du chemin de votre répertoire app/etc/), suivi du cache Tag et de quelques autres identifiants : Cache tags drupal 10. L’ensemble constitue l’identifiant unique de l’entrée spécifique du cache.
Avec ces informations en main, nous pouvons mieux comprendre ce qui se passe lorsque vous videz le cache de Magento dans le back-end.
?vider le cache de Magento ?
Lorsque vous cliquez sur « Flush Magento Cache », le contrôleur de cache appelle la méthode « flushSystemAction() » (Cache tags drupal 9). Cette fonction, à son tour, appelle la méthode ?cleanCache() ? de l’objet Mage_Core_Model_App, qui appelle ensuite la méthode ?clean($tags) ? dans l’objet Mage_Core_Model_Cache : Cache tags gitlab. C’est ici que les différences entre les deux méthodes entrent en jeu. Cache tags in drupal 8. Jetons un coup d’œil à la définition de cette fonction :
/**
* Nettoyer les données mises en cache par balise spécifique
* @param array $tags
* @return bool
public function 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)) ;
} else {
$res = $this-_frontend-clean($mode, array(Mage_Core_Model_App::CACHE_TAG)) ;
$res = $res && $this-_frontend-clean($mode, array(Mage_Core_Model_Config::CACHE_TAG)) ;
return $res ;
Cette méthode fait appel à l’objet Zend Cache, que nous verrons dans un instant : Cache tags laravel 10. Mais d’abord, je veux souligner que cette méthode nettoie tous les fichiers de cache correspondant à un tableau de balises, ou, s’il est vide, aux balises définies dans Mage_Core_Model_App et Mage_Core_Model_Config. Cache tags limit reached. Cela ne nettoie pas tout le cache !
Avant de regarder la définition de la fonction Zend_Cache ?clean() ?, voyons ce qui se passe lorsque nous cliquons sur l’autre bouton, « Flush Cache Storage ».
?vider le stockage du cache ?
Lorsque vous cliquez sur ce bouton, le contrôleur de cache appelle la méthode ?flushAllAction() ? plutôt que la méthode ?flushSystemAction() ? que nous avons vue ci-dessus (Cache tags.invalidate). Cette méthode, à son tour, obtient l’objet de cache de Mage_Core_Model_App de la même manière que la méthode ci-dessus, mais au lieu d’appeler ?clean($tags) ? sur l’objet de cache, elle appelle ?flush() ? Examinons brièvement cette définition :
/**
* Nettoyer les données mises en cache par balise spécifique
* @return bool
public function flush()
$res = $this-_frontend-clean() ;
return $res ;
Eh bien, regardez ici ! Cette méthode appelle la même méthode Zend Cache que la méthode ci-dessus, à l’exception d’une différence majeure : elle ne passe aucune balise ! Maintenant, regardons la méthode Zend_Cache_Core::clean() pour voir ce qui se passe quand vous ne lui dites pas ce qu’il faut nettoyer :
/**
* Nettoyer les entrées du cache
* Les modes disponibles sont :
* ?all ? (par défaut) = supprimer toutes les entrées du cache ($tags n’est pas utilisé)
* ?old ? = supprimer les entrées de cache trop anciennes ($tags n’est pas utilisé)
* ?matchingTag ? = supprimer les entrées de cache correspondant à tous les tags donnés
* ($tags peut être un tableau de chaînes ou une seule chaîne)
* ?notMatchingTag ? = supprimer les entrées de cache ne correspondant pas à l’une des balises données
* ($tags peut être un tableau de chaînes ou une seule chaîne)
* ?matchingAnyTag ? = supprimer les entrées de cache correspondant aux balises données
* ($tags peut être un tableau de chaînes ou une seule chaîne)
* @param string $mode
* @param array|string $tags
* @throws Zend_Cache_Exception
* @return boolean True if ok
public function clean($mode = ?all ?, $tags = array())
if (!$this-_options[?caching ?]) {
return 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(?Mode de nettoyage invalide ?);
self::_validateTagsArray($tags) ;
return $this-_backend-clean($mode, $tags) ;
La documentation de cette définition de fonction est assez bonne. Custom cache tag drupal. Vous pouvez voir ici que si le premier bouton ? ?Flush Magento Cache ? ? tente d’invalider tous les actifs mis en cache correspondant à n’importe quel tag passé dans le tableau $tags, ?Any ? ici n’est qu’un sous-ensemble limité des éléments stockés dans le cache. Cependant, lorsque vous appelez la méthode ?clean() ? sans aucun paramètre, comme le fait le bouton « Flush Cache Storage », le comportement par défaut est de supprimer toutes les entrées du cache, quelles que soient les balises.
Cela peut sembler trivial pour ceux d’entre vous qui utilisent le cache du système de fichiers par défaut avec Magento : Drupal cache invalidate tags. Vous pouvez simplement y aller et manuellement ?rm -rf var/cache/* ? pour effacer le cache : Drupal cache tags list. Mais pour ceux qui utilisent d’autres types de cache (xcache, memcached, apc, db, sqlite), la fonction « Vider le cache de Magento » ne fait peut-être pas ce que vous voulez qu’elle fasse. Drupal cache tags node_list. Ainsi, lorsque tout le reste échoue et que vous voulez être sûr que le cache est totalement vide, assurez-vous de cliquer sur « Flush Cache Storage ».
Si vous utilisez l’un des types de cache à stockage partagé – par exemple deux applications différentes utilisant la même instance memcached – cliquer sur « Flush Cache Storage » peut supprimer les entrées du cache pour cette autre application également. Ce n’est peut-être pas ce que vous voulez, alors faites attention.