在缓存管理下的Magento管理员中,当缓存显示为无效时,它意味着什么? Magento如何知道缓存失效?特别是,我想知道HTML Block缓存。什么条件会导致此缓存显示为无效?
答案 0 :(得分:16)
在Magento中,无论何时对产品,静态块等进行更改,它都会识别出数据库中的数据不再与缓存中的数据相同。不幸的是,Magento没有意识到什么缓存数据是不同的,只是某些东西是不同的。
您需要进入系统>缓存管理并刷新无效的缓存类型。
编辑:
创建一个模块(或使用现有模块),您可以使用该模块设置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运行一样。
答案 1 :(得分:1)
2015:AOE Sheduler能够通过cronjob清理缓存。 改变工作
“core_clean_cache”
从30 2 * * *
(每日2:30)到59 * * * *
(每59分钟)。
答案 2 :(得分:1)
@Magento Guy的回答是正确的,但我认为下面的解决方案可以帮助您刷新Magento上无效的缓存。
我使用Bitnami Magento Stack,对我来说,下面的解决方案是我找到的最好的。
我试图创建一个Mage_Shell_Class php文件,但没有成功(无效的缓存数组在运行时始终为空,无论如何,我真的不知道为什么)。
我已经创建了一个php文件&#39; sample.php&#39;:
<?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 line命令,但我认为这对你有帮助。
答案 3 :(得分:0)
到目前为止,没有一个答案提供正确的定义,也没有一个解决方案。所以我决定死死回答:-)
<块引用>显示缓存无效是什么意思?
这意味着缓存的数据不反映数据库中的实际数据。就这么简单。
现在,没有被问到的重要问题是什么使失效发生。这主要有两个主要原因:
解决方案是:
像“无效的干净缓存”这样的解决方案绝对是糟糕的。那是解决症状而不是根本原因。这是以许多转换丢失(读取 = 金钱)为代价的,因为您本质上是在无缓存运行 - 即使是普通商店,也可能需要数天时间才能从单个缓存清理中完全恢复并将缓存预热到其全部潜力。>