手动清除数据库存储的高速缓存时应清空哪些表?


13

在D8之前,要手动清除缓存,可以截断所有以开头的表cache_

在Drupal 8中,仍然存在以开头的表cache_,但也有一个cachetags表。

cache_*如果需要手动清除缓存,D8中的建议是否仍会被截断?将cachetags表和表一起截断是否安全/必需/建议cache_*

我知道可能会有contrib模块在做事上有所不同,我最感兴趣的是内核的功能,以及总体上Drupal 8的“最佳实践”。


您可以看一下清除所有缓存按钮的功能。
2016年


所有缓存表都可以安全地截断,但是并未完全删除它们。
hamza.gt

Answers:


6

在drupal 8中,如果您正在寻找需要手动清除的安全表,请清除以cache_开头的表,并同时截断cachetags表。

如果您使用的是drush,请使用此命令清除缓存-

刷新缓存重建


3

根据本文的介绍 cachetags,将在存储缓存对象时进行设置,因此也应该安全地截断该表。高速缓存标签标识高速缓存对象,您可以立即获取所有相关对象。


我进行了测试,该表可以被截断而不会出现问题(或仅可能出现性能问题)。在加载实体时会重新创建它,但是...我不知道为什么要删除实体实例,保存在cachetags中的标签已经在表中了。我认为必须将其删除。
estoyausente

我假设cron运行时删除了cachetags表中的数据,而实体删除后您看到的只是剩菜了
PaulBönisch2016年

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_前缀的文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.