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.

Clive
la source
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

Rahul Mishra
la source
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.

Paul Bönisch
la source
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};
André
la source
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.

Dan
la source