2011-12-07 5 views
17

Magento管理者のキャッシュ管理で、キャッシュが無効であると表示されるとはどういう意味ですか? Magentoはキャッシュが無効であることをどのように知っていますか?特に、私はHTMLブロックキャッシュについて疑問に思っています。どのような条件でこのキャッシュが無効になって表示されるのですか?Magentoでは "無効化された"キャッシュの意味は何ですか?

答えて

16

Magentoでは、製品、静的ブロックなどを変更するたびに、データベース内のデータがキャッシュ内のデータと同じではないことが認識されます。残念ながら、Magentoは実現しません何のキャッシュのデータは、ちょうどその何かが異なっています。

システム>キャッシュ管理に移動し、無効化されたキャッシュタイプを更新する必要があります。

EDIT:

は、モジュールを作成(または既存のモジュールを使用)を使用すると、キャッシュをリフレッシュするためにcronジョブを設定するために使用することができます。 {名前空間}/{モジュール名} /Model/Observer.php

そのファイル内::あなたのモジュールのetc/config.xmlに

<?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()); 
    } 
    } 

} 

<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が実行されるときに自動的に更新されます。

+3

私はキャッシュをリフレッシュする方法を理解していますが、キャッシュが無効になっていることがわかったときに実行します。キャッシュが無効になっていることがどのように分かっているのか分かりません。そして、なぜキャッシュが無効であることが分かっていれば、自動的にキャッシュをリフレッシュしませんか?キャッシュをリフレッシュするリスクはありますか? – localfilmmaker

+0

変更するたびに、magentoがイベントを発生させます。関連するキャッシュを無効にするこれらのイベントのリスナーがあります。なぜこれを行うのか(なぜそれが自動的にリフレッシュされないのか)は、最終的には設計上の決定ですが、おそらくコンテンツをステージングすることと関係しています。たとえば、相互に関係する複数の製品に変更を加え、キャッシュを更新することができます。私は、cronがサーバー上で動作するたびに実行されるcronジョブでこれを克服し、自動的にキャッシュをリフレッシュする関数を呼び出します。元の答えを編集してコードを追加します。 –

+3

非常に悪い解決策:すべてのキャッシュをリフレッシュするcronを設定する、実行するたびにキャッシュを無効にする...少なくともキャッシュが無効になっているかどうかチェックし、10分30秒ごとにcronを設定する必要があります... – WonderLand

1

2015:AOE Sスケーターはcronjobでキャッシュをクリーニングすることができます。 変更JOB

"core_clean_cache" 59 * * * *に(毎日午前2時30分)30 2 * * *から

(毎週59分)。

0

@Magento Guyの回答は正しいですが、以下のこの解決策はMagentoの無効化されたキャッシュをリフレッシュするのに役立ちます。

私はBitnami Magento Stackを使用していますが、このソリューションは私が見つけた最高のものでした。

私はMage_Shell_Class PHPファイルを作成しようとしましたが、成功しませんでした。無効なキャッシュ配列は実行時に常に空でした。何があっても、なぜそれほど想像できません。

私は、PHPファイル「をsample.php」作成しました:私は、Magentoのルートフォルダの上に置かれてきた、と私はrootユーザーの下で実行されるcronジョブを使用し、それを起動する

<?php 

require 'app/Mage.php'; 

$invalid = Mage::app()->getCacheInstance()->getInvalidatedTypes(); 

foreach($invalid as $i) 
{ 
    Mage::app()->getCacheInstance()->cleanType($i["id"]); 
} 

を。だから、

、rootユーザーにcronジョブを作成するには:

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は、この特定のbitnamiスタックを扱うときに環境を設定するのに役立つスクリプトです。
  3. このスクリプトの出力を得るには、この最後の部分 ">> /var/log/cron/cron.log 2> &"を使用して、作成したディレクトリ(/ var/log/cron)、正しいアクセス権を与えています。

おそらく、あなたはcron lineコマンドを変更する必要がありますが、これが役立つと思います。

関連する問題