【发布时间】:2011-12-07 22:35:42
【问题描述】:
在缓存管理下的 Magento 管理员中,当它显示缓存为无效时是什么意思? Magento 如何知道缓存无效?特别是,我想知道 HTML 块缓存。什么情况会导致此缓存显示为无效?
【问题讨论】:
标签: magento
在缓存管理下的 Magento 管理员中,当它显示缓存为无效时是什么意思? Magento 如何知道缓存无效?特别是,我想知道 HTML 块缓存。什么情况会导致此缓存显示为无效?
【问题讨论】:
标签: magento
在 Magento 中,每当您对产品、静态块等进行更改时,它都会识别出数据库中的数据与缓存中的数据不同。不幸的是,Magento 并没有意识到 什么 缓存数据是不同的,只是 something 是不同的。
您需要进入系统>缓存管理并刷新失效的缓存类型。
编辑:
创建一个模块(或使用现有模块),您可以使用它来设置 cron 作业以刷新缓存。创建文件:{namespace}/{modulename}/Model/Observer.php
在那个文件里面:
<?php
class <namespace>_<modulename>_Model_Observer {
public function refreshCache() {
try {
$allTypes = Mage::app()->useCache();
foreach($allTypes as $type => $blah) {
Mage::app()->getCacheInstance()->cleanType($type);
}
} catch (Exception $e) {
// do something
error_log($e->getMessage());
}
}
}
在你的模块的 etc/config.xml 中:
<config>
...
<crontab>
<jobs>
<{modulename}_refresh_cache>
<schedule><cron_expr>* * * * *</cron_expr></schedule>
<run><model>{modulename}/observer::refreshCache</model></run>
</{modulename}_refresh_cache>
</jobs>
</crontab>
...
</config>
现在只要在您的服务器上正确配置了 cron,缓存就会自动更新,就像 cron 运行的频率一样。
【讨论】:
到目前为止,没有一个答案提供了正确的定义,也没有一个解决方案。所以我决定死神回答:-)
显示缓存无效是什么意思?
这意味着缓存的数据不反映来自数据库的实际数据。就这么简单。
现在,没有被问到的重要问题是导致失效发生的原因。这基本上有两个主要原因:
解决方案是:
像“清理缓存无效”这样的解决方案绝对是粗俗的。那是解决症状而不是根本原因。这是以许多丢失的转换(读取 = 金钱)为代价的,因为您实际上是在无缓存运行 - 即使是普通商店,也可能需要几天时间才能从单个缓存清理中完全恢复并将缓存预热到其全部潜力。
【讨论】:
2015:AOE Sheduler 能够通过 cronjob 清理缓存。 换工作
“core_clean_cache”
从30 2 * * *(每天 2:30)到59 * * * *(每 59 分钟)。
【讨论】:
@Magento Guy 的回答是正确的,但我认为下面的这个解决方案可以帮助您刷新 Magento 上的无效缓存。
我使用 Bitnami Magento Stack,对我来说,下面的这个解决方案是我找到的最好的。
我尝试创建一个 Mage_Shell_Class php 文件,但没有成功(无效的缓存数组在运行时总是为空,无论如何,我真的不知道为什么)。
我创建了一个 php 文件“sample.php”:
<?php
require 'app/Mage.php';
$invalid = Mage::app()->getCacheInstance()->getInvalidatedTypes();
foreach($invalid as $i)
{
Mage::app()->getCacheInstance()->cleanType($i["id"]);
}
我已将它放在 magento 根文件夹中,要启动它,我使用在 root 用户下运行的 cronjob。
所以,要在 root 用户上创建 cronjob:
sudo crontab -u root -e
这是我运行它的命令行:
* * * * * . /opt/bitnami/scripts/setenv.sh ; /opt/bitnami/php/bin/php /opt/bitnami/apps/magento/htdocs/sample.php >> /var/log/cron/cron.log 2>&1
这一行的某些部分对我的问题非常特殊:
可能您需要更改 cron 行命令,但我认为这会对您有所帮助。
【讨论】: