PHP+memcache で MTInclude のキャッシュ有効期限が短い場合がある

Description

から派生。

テンプレートモジュールのキャッシュの設定が「作成または更新後に無効にする」のとき、キャッシュの有効期限が適切でないため、MTIncludeのキャッシュが極端に短くなる場合がある。

$cache_ttl は get用のTTL であり、テンプレートの modified_onからの経過秒数が入っている。

キャッシュの動作の流れ

  1. (00:00)テンプレートを更新

  2. (00:30)MTIncludeを実行 → 30秒以内に作成されたキャッシュがないので取得失敗

    1. キャッシュ作成 → 有効期限が30秒後の01:00に設定(適切でない)

  3. (00:40)MTIncludeを再実行 → 40秒以内に作成されたキャッシュがあるので取得成功

  4. (01:01)MTIncludeを再実行 → set時のTTLで有効期限切れ

Perlでは $ttl_for_set$ttl_for_get を区別し、set時はデフォルトで3600秒が設定されている。

Environment

None

Checklists

None

Activity

Show:

Keita SugamaJuly 10, 2024 at 3:51 AM

ありがとうございます。マージしました。

Chieko MatsuoJuly 10, 2024 at 3:02 AM

上記の手順で期待通りの結果となることを確認しました。

Keita SugamaJuly 10, 2024 at 2:03 AM
Edited

すいません、手順のテンプレートのコピペに失敗していたので直します。

直しました → <mt:EntryTitle> , <mt:AssetLabel>

Keita SugamaJuly 9, 2024 at 12:01 PM
Edited

ありがとうございます。テストを少し整理しましたが、このままQAに進めたいと思います。

QAをお願いいたします。

PR

QA手順

シナリオ1とシナリオ2で、 MemcachedServer の設定あり、と設定なしの環境で期待する動作になるかの確認をお願いします。

シナリオ1

  1. 下記の内容でテンプレートモジュール「mymodule1」を作成する。モジュールのキャッシュ設定は「キャッシュしない」とする。

  2. インデックステンプレートをダイナミックで作成し、内容を下記とする。

  3. (期待する動作)公開ページを開くと正しい記事タイトル一覧が表示される。

  4. (期待する動作)記事1件のタイトルを変更し、3の公開ページをリロードしても変更が反映されない。

  5. (期待する動作)2のインデックステンプレートのcache="1"を削除し、3の公開ページをリロードすると変更が反映される。

  6. (期待する動作)スタティックに切り替えても一覧が表示される。

シナリオ2

  1. 下記の内容でテンプレートモジュール「mymodule2」を作成する。モジュールのキャッシュ設定は「作成または更新後に無効にする」、オブジェクトの種類として「記事」をチェックする。

  2. インデックステンプレートをダイナミックで作成し、内容を下記とする。

  3. (期待する動作)公開ページを開くと正しいアセットラベル一覧が表示される。

  4. (期待する動作)アセット1件のラベルを変更し、3の公開ページをリロードしても変更が反映されない。

  5. (期待する動作)記事1件更新し、3の公開ページをリロードすると変更が反映される。

  6. (期待する動作)スタティックに切り替えても一覧が表示される。

  7. 課題説明のケースの確認(可能そうなら実施)

    1. 再度、ダイナミックに切り替える。

    2. テンプレートを更新し、記事を更新し、テンプレート更新から1分後ごろに公開ページを開く。

    3. (期待する動作)アセットラベルを更新し、公開ページをリロードするとラベル更新が反映されない。

    4. (期待する動作)最初のテンプレート更新から2分以上経過してもキャッシュが生き、ラベル更新は反映されない。
      (従来の動作)2分経過すると自動的にキャッシュが無効になり、ラベル更新が反映される。

Kenichi IshigakiJuly 9, 2024 at 10:33 AM

MT::Memcached->cleanup は windowsでも悪さはしないと思いますが、いかがでしょうか。

試してみたら、こちらは大丈夫そうでした。追加分のコミットもよいとおもいます。

Fixed

Details

Assignee

Reporter

Fix versions

Priority

Smart Checklist

Created July 5, 2024 at 6:01 AM
Updated July 10, 2024 at 3:51 AM
Resolved July 10, 2024 at 3:51 AM