Quelles tables doivent être vidées lors de l'effacement manuel du cache stocké dans la base de données?


13

Avant D8 pour vider le cache manuellement, on pouvait tronquer toutes les tables en commençant par cache_.

Dans Drupal 8, il y a toujours des tables commençant par cache_, mais il y a aussi une cachetagstable.

Le conseil du D8 est-il toujours à tronquer cache_*si vous devez vider le cache manuellement? Est-il sûr / obligatoire / recommandé de tronquer la cachetagstable avec les cache_*tables?

Je suis conscient qu'il peut y avoir des modules contrib qui font les choses différemment, je suis surtout intéressé par ce que fait le noyau et ce qui est considéré comme la "meilleure pratique" pour Drupal 8 en général.


Vous pouvez simplement voir ce que fait l'effacement de tous les boutons de cache.
Eyal


Toutes les tables de cache peuvent être tronquées en toute sécurité, mais ne les ont pas entièrement supprimées.
hamza.gt

Réponses:


6

Dans drupal 8 si vous recherchez les tables sûres qui doivent être effacées manuellement, effacez les tables commençant par cache_ et tronquez également la table cachetags.

Si vous utilisez drush, utilisez cette commande pour vider le cache-

drush cache-rebuild


3

Selon cet article, cachetags les paramètres de cache sont stockés, il doit donc être également sûr de tronquer cette table. Les cachetags identifient les objets du cache et vous pouvez obtenir tous les objets associés en même temps.


J'ai testé et le tableau peut être tronqué sans problème (ou seulement avec le problème de performance potentiel). Il est recréé lorsque l'entité est chargée mais ... Je ne sais pas pourquoi si vous supprimez une instance d'entité, les balises enregistrées dans les cachetags sont déjà dans la table. Je pense qu'il doit être retiré.
estoyausente

Je suppose que les données de la table des cachetags sont supprimées lors de l'exécution de cron et que ce que vous voyez après la suppression d'entité ne sont que des restes
Paul Bönisch

0

C'est très pratique. Remplacez dbname au besoin:

DB_NAME="dbname"

mysql -uroot -proot --execute="SELECT concat('TRUNCATE TABLE ', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '${DB_NAME}' AND TABLE_NAME LIKE '%cache%'" | sed 1d | mysql -uroot -proot ${DB_NAME};

0

Vous pouvez le faire pour un one-liner:

drush sqlq "TRUNCATE cache_default;TRUNCATE cache_bootstrap;TRUNCATE cache_container;TRUNCATE cache_discovery;TRUNCATE cache_data;" -l <uri> --no-interaction

Ajoutez autant de préfixes cache_ que vous le souhaitez.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.