データベースに保存されたキャッシュを手動でクリアするとき、どのテーブルを空にする必要がありますか?


13

D8より前に手動でキャッシュをクリアするには、で始まるすべてのテーブルを切り捨てることができましたcache_

Drupal 8にはまだで始まるテーブルcache_がありcachetagsますが、テーブルもあります。

cache_*キャッシュを手動でクリアする必要がある場合、D8のアドバイスはまだ切り捨てられますか?cachetagsテーブルと一緒にcache_*テーブルを切り捨てることは安全/必要/推奨ですか?

contribモジュールが物事を異なる方法で行う可能性があることを知っています。私は主にコアが何をするか、そして一般的にDrupal 8の「ベストプラクティス」と見なされるものに興味があります。


すべてのキャッシュをクリアするボタンが何をするかを見ることができます。
エアル


すべてのキャッシュテーブルは切り捨てても安全ですが、完全には削除しませんでした。
hamza.gt

回答:


6

drupal 8では、手動でクリアする必要がある安全なテーブルを探している場合は、cache_で始まるテーブルをクリアし、cachetagsテーブルも切り捨てます。

ブラシを使用している場合は、このコマンドを使用してキャッシュを消去します-

キャッシュリビルドを打ち消す


3

この記事に よるとcachetags、キャッシュオブジェクトが格納されるときに設定されるため、このテーブルも切り捨てても安全です。キャッシュタグはキャッシュオブジェクトを識別し、関連するすべてのオブジェクトを一度に取得できます。


私はテストし、問題なくテーブルを切り捨てることができます(または潜在的なパフォーマンスの問題のみ)。エンティティが読み込まれたときに再作成されますが、エンティティインスタンスを削除した場合、cachetagsに保存されたタグが既にテーブルにある理由はわかりません。私はそれを削除する必要があるということです。
-estoyausente

私はcachetagsテーブルからのデータは、cronの実行にremovenあり、あなたはエンティティ除去した後に表示されるものだけで残り物があると仮定
ポールBönisch

0

これは非常に便利です。必要に応じてdbnameを置き換えます。

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

ワンライナーでこれを行うことができます:

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

cache_プレフィックスを使用して、必要な数だけ追加します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.