Magento中“无效”缓存的含义是什么?

时间:2011-12-07 22:35:43

标签: magento

在缓存管理下的Magento管理员中,当缓存显示为无效时,它意味着什么? Magento如何知道缓存失效?特别是,我想知道HTML Block缓存。什么条件会导致此缓存显示为无效?

4 个答案:

答案 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

这一行的某些部分对我的问题非常特别:

  1. 由于它只刷新了无效的缓存,我决定每分钟运行一次。
  2. setenv.sh是一个脚本,可帮助我在处理此特定bitnam堆栈时设置环境。
  3. 要获得此脚本的输出,我使用了最后一部分&#34;&gt;&gt; /var/log/cron/cron.log 2&gt;&amp; 1&#34;将错误输出到我已创建的目录(/ var / log / cron),并为其提供了正确的权限。
  4. 可能你需要更改cron line命令,但我认为这对你有帮助。

答案 3 :(得分:0)

到目前为止,没有一个答案提供正确的定义,也没有一个解决方案。所以我决定死死回答:-)

<块引用>

显示缓存无效是什么意思?

这意味着缓存的数据不反映数据库中的实际数据。就这么简单。

现在,没有被问到的重要问题是什么使失效发生。这主要有两个主要原因:

  • 您有一个错误的代码,它对数据库使用直接 SQL 查询 - 这绕过了 Magento 类,因此它无法知道正确索引了哪些数据,因此它必须将整个索引/缓存标记为无效。< /strong>
  • 重新索引未运行。这意味着 Magento cron 可能没有设置。重新索引是触发单个缓存条目更新的原因。另一个子原因是重新索引设置为“保存时”,然后页面在保存产品/CMS 页面等时超时/过早关闭。
  • 最不可能(但仍然有效)是 Magento 错误或一些需要彻底清除缓存的重大设置更改。

解决方案是:

  • 摆脱任何向 Magento 代码库引入直接 SQL 查询的插件(或开发人员!)
  • 确保 Magento cron 已配置并正在运行,确保将索引设置为“按计划”更新

像“无效的干净缓存”这样的解决方案绝对是糟糕的。那是解决症状而不是根本原因。这是以许多转换丢失(读取 = 金钱)为代价的,因为您本质上是在无缓存运行 - 即使是普通商店,也可能需要数天时间才能从单个缓存清理中完全恢复并将缓存预热到其全部潜力。