PHP+memcache で MTInclude のキャッシュ有効期限が短い場合がある
Description
Environment
Checklists
Activity
Keita SugamaJuly 10, 2024 at 3:51 AM
ありがとうございます。マージしました。
Chieko MatsuoJuly 10, 2024 at 3:02 AM
上記の手順で期待通りの結果となることを確認しました。
Keita SugamaJuly 10, 2024 at 2:03 AMEdited
すいません、手順のテンプレートのコピペに失敗していたので直します。
直しました → <mt:EntryTitle>
, <mt:AssetLabel>
Keita SugamaJuly 9, 2024 at 12:01 PMEdited
ありがとうございます。テストを少し整理しましたが、このままQAに進めたいと思います。
QAをお願いいたします。
PR
QA手順
シナリオ1とシナリオ2で、 MemcachedServer
の設定あり、と設定なしの環境で期待する動作になるかの確認をお願いします。
シナリオ1
下記の内容でテンプレートモジュール「mymodule1」を作成する。モジュールのキャッシュ設定は「キャッシュしない」とする。
インデックステンプレートをダイナミックで作成し、内容を下記とする。
(期待する動作)公開ページを開くと正しい記事タイトル一覧が表示される。
(期待する動作)記事1件のタイトルを変更し、3の公開ページをリロードしても変更が反映されない。
(期待する動作)2のインデックステンプレートの
cache="1"
を削除し、3の公開ページをリロードすると変更が反映される。(期待する動作)スタティックに切り替えても一覧が表示される。
シナリオ2
下記の内容でテンプレートモジュール「mymodule2」を作成する。モジュールのキャッシュ設定は「作成または更新後に無効にする」、オブジェクトの種類として「記事」をチェックする。
インデックステンプレートをダイナミックで作成し、内容を下記とする。
(期待する動作)公開ページを開くと正しいアセットラベル一覧が表示される。
(期待する動作)アセット1件のラベルを変更し、3の公開ページをリロードしても変更が反映されない。
(期待する動作)記事1件更新し、3の公開ページをリロードすると変更が反映される。
(期待する動作)スタティックに切り替えても一覧が表示される。
課題説明のケースの確認(可能そうなら実施)
再度、ダイナミックに切り替える。
テンプレートを更新し、記事を更新し、テンプレート更新から1分後ごろに公開ページを開く。
(期待する動作)アセットラベルを更新し、公開ページをリロードするとラベル更新が反映されない。
(期待する動作)最初のテンプレート更新から2分以上経過してもキャッシュが生き、ラベル更新は反映されない。
(従来の動作)2分経過すると自動的にキャッシュが無効になり、ラベル更新が反映される。
Kenichi IshigakiJuly 9, 2024 at 10:33 AM
MT::Memcached->cleanup は windowsでも悪さはしないと思いますが、いかがでしょうか。
試してみたら、こちらは大丈夫そうでした。追加分のコミットもよいとおもいます。
から派生。
テンプレートモジュールのキャッシュの設定が「作成または更新後に無効にする」のとき、キャッシュの有効期限が適切でないため、MTIncludeのキャッシュが極端に短くなる場合がある。
で
$cache_ttl
は get用のTTL であり、テンプレートの modified_onからの経過秒数が入っている。キャッシュの動作の流れ
(00:00)テンプレートを更新
(00:30)MTIncludeを実行 → 30秒以内に作成されたキャッシュがないので取得失敗
キャッシュ作成 → 有効期限が30秒後の01:00に設定(適切でない)
(00:40)MTIncludeを再実行 → 40秒以内に作成されたキャッシュがあるので取得成功
(01:01)MTIncludeを再実行 → set時のTTLで有効期限切れ
Perlでは
$ttl_for_set
と$ttl_for_get
を区別し、set時はデフォルトで3600秒が設定されている。