21

ですから、もちろん、キャッシングは、他のほとんどの人と同じように、Magentoで私を最も混乱させるものです。現在、私たちが取り組んでいるサイトの1つはエンタープライズであり、もちろんFPCを利用しています。問題は、15分ごとに実行される在庫更新があることです。多くの注文は、電話やカタログを通じてMagentoの外部の外部システムにCSRに発注されます。

15分ごとにスクリプトが実行され、そのシステムのインベントリがチェックされ、Magentoのインベントリと異なるかどうかが確認されます。違いがある場合は、Magentoでインベントリが更新されます。すべてのMagentoメソッドを使用し、SQLなどは使用しません。

私たちは常にキャッシュの問題を抱えており、最新の手法をすべて試してきました。私たちが試している最新のものはRedisであり、他のサイトでも成功を収めています。ただし、サーバーに異常な負荷がかかっていることがわかり、ページがキャッシュされていないことは明らかです。

コードを掘り下げた後、すべてのモデルの保存または管理製品コントローラーの保存の後に、キャッシュを無効にする必要があるかどうかを確認しているように見えます。属性を変更すると、少なくともインベントリはFPCを無効にする必要があるとマークするようです。

無効化の意味について混乱しています。しばらく前に、同様のことについてカスタマーサポートに質問があり、これが応答でした。

販売後に在庫が減少した場合でも、製品、カテゴリ、CMSが変更されると、フルページキャッシュは無効な状態になります。

フルページキャッシュが無効状態になった場合、これはフロントエンドで何かが変更されたことを意味するわけではありませんが、最後の更新後に適用された変更はフロントエンドに表示されません。

ただし、FPCを常に検証することがビジネスロジックの必須事項である場合は、Magentoインストールを設定して、必要な頻度でcron機能を使用してFPCを自動的に更新することができます。

ただし、1.9と1.11 Enterpriseの両方で行ったすべてのテストで、FPCが無効になっていると、応答がキャッシュからプルされていないように見えます。これは、新しいアップデートがないというだけで彼らが言ったことと矛盾しています。

足りないものはありますか?特にFPCのためにMagentoで無効化がどのように機能するか、またはプロセスとコードを完全に理解するための適切なリンクについて、誰かが良い説明を持っていますか?

フルページキャッシュされている任意のページに対して、これを自分で試すことができます。processRequestしかし、のメソッドは/app/code/core/Mage/Core/Model/Cache.php、キャッシュされた応答で本文のコンテンツを設定し、ページがキャッシュされている場合はtrueを返す必要があることを理解しています。

テストするには、任意のページに移動し、キャッシュされてtrueを返していることを確認します。入って、製品(この場合は数量)を編集します。これにより、FPCが無効になります。ただし、以前にキャッシュされたページをロードすると、このメソッドではfalseが返され、キャッシュされたページではなくなります。これがページがキャッシュされているかどうかを判断するのに正確かどうかはわかりませんが、それが私の調査の結果です。私が間違っている場合は訂正してください。

更新:さらに調査したところ、管理者に製品を保存すると、コントローラーのアクションが

Mage_Adminhtml_Catalog_ProductController::saveAction()

次のメソッドを呼び出します

Mage::getModel('catalogrule/rule')->applyAllRulesToProduct($productId)

次に、Mage_CatalogRule_Model_Resource_RuleクラスでapplyAllRulesForDateRangeメソッドが呼び出され、イベントが発生します

catalogrule_after_apply

フルページキャッシュモジュールがFPCタグのクリーンキャッシュ方式を監視および起動しているもの。基本的に、すべてのFPCキャッシュレコードを削除します。

これより前に、ロジックが製品タグとカテゴリタグに関連付けられているFPCレコードをクリアしている場合、これが必要な理由がわかりません。これはバグですか?

4

4 に答える 4

2

FPC は、在庫がゼロになった製品の在庫切れを表示することを目的としているため、在庫の変化を観察しています。修正は、製品が在庫を変更するたびにではなく、製品がゼロになったときにイベント ディスパッチを作成し、元の代わりにそのイベントを監視するように FPC を書き換えることです。

もう 1 つの方法は、更新される製品に関連するキャッシュの部分のみを無効にすることですが、これはかなり重要なアーキテクチャの変更になります。

于 2012-06-28T02:33:41.217 に答える
2

新しいカスタム インデクサー Mage_Index_Model_Indexer_Abstract を作成し、cron ジョブを使用して新しいリソース モデル API メソッドを作成します。

于 2014-01-04T03:27:11.347 に答える
0

phoenix ページ キャッシュ モジュールは、製品ページとカテゴリ ページをクリアしますが、キャッシュ無効化の一部の領域はカバーされないままにします。また、動的コンテンツをうまく処理できません。

おそらく、デフォルトのレイアウトをロードし、ajax 呼び出しでブロックをレンダリングすることで動的コンテンツをロードする素晴らしい仕事をする aoe_static モジュールをチェックアウトする必要があります。この ajax 呼び出しは、セッションを許可するように Cookie も設定します。

かなり難しい領域で 2 つのモジュールを使用する場合は注意が必要です。このmagento オープン ソースのフル ページ キャッシュを表示する必要があるかもしれません。

于 2012-11-07T13:14:54.747 に答える
0

Magento のフル ページ キャッシュについて書いた記事を読んでください。これは、キャッシング メカニズム全体を突然意味のあるものにするバグ修正を強調しています。

http://www.excitedcroc.com/article/why-the-magento-full-page-cache-doesnt-expire

基本的に、Magento が Zend Framework のキャッシュ メカニズムを使用する方法にバグがあります。

問題は、Zend ライブラリ キャッシュ クラスと Magento エンタープライズ キャッシュ クラスが、ライフタイム値を生成する関数で null と false を組み合わせて使用​​することです。null !== false であるため、既定の有効期間である 10 日間が常に使用されます。この問題は、app/code/core/Enterprise/PageCache/Model/Processor.php の processRequestResponse 関数に起因します。保存時にキャッシュ インスタンスに有効期間の値が渡されないため、既定値は null になります。

app/code/core/Mage/Core/Model/Cache.php の保存機能のライフタイム パラメータのデフォルト値を変更すると、この問題が修正されます。null ではなく false に設定するだけです (上記のリンク先の記事でその理由が完全に説明されています)。

- public function save( $data, $id, $tags = array(), $lifeTime = null )

+ public function save( $data, $id, $tags = array(), $lifeTime = false )

于 2013-02-08T10:39:49.577 に答える