0

predefined URLs次の方法に応じてリクエストをルーティングするアプリケーションがあります。

第 1 ステップ: キャッシュ ルックアップ
すべてURLSが 1 つに集約されarray(シリアル化され、キャッシュに格納されます)、その構造は次のとおりです。

  • それぞれarray keyURL
  • 情報 (つまり、URLをどうするかURL) は、対応する として定義されarray valueます。

実際には、これにより(FYIPHP 5.4配列構文) が得られます。

<?php

// structure of the cached URLS array
$cached_urls = [
    '/pageA' => [
        'controller' => 'ProductController',
        'content_id' => 1234
    ],
    '/serviceA' => [
        'controller' => 'ServiceController',
        'content_id' => 45678
    ]
];

// working with the array (retrieve $cached_urls from cache, then...)
if (!isset($cached_urls[$request['url']])) {
    // 404
} else {
    $url = $cached_urls[$request['url']];
    // further actions based on $url
}

2 番目のステップ:配列をキャッシュから取得できなかっ
た場合のDB ルックアップとキャッシュの再構築3 つのことを行います。$cached_urls

  • テーブル (それぞれが表し、それ自体がクエリのフィルター処理に使用されるフィールド) およびその他の関連テーブルURLから情報を取得します。urlrow1 URLURL
  • キャッシュ シナリオと同じ方法でリクエストを処理します。$url
  • キャッシュを再構築して、次回リクエストが来たときに DB ルックアップを行う必要がないようにします。

実行速度に関しては、次のとおりです (速い方から遅い方へ)。

  1. キャッシュ ルックアップ ( ~10ms)
  2. DB ルックアップ ( ~100ms)
  3. キャッシュの再構築 (~2000ms)

キャッシュが利用可能な場合、ページは非常に高速に提供されますが、キャッシュが再構築されるたびに (約 1 分ごと)、ページが提供されるまでに数秒かかるため、問題が発生します。したがって、私は疑問に思っていました:

同じタスクを同時に複数回実行することを避けながら非同期処理を実行するために PHP で利用可能な設計パターンは何ですか (私の場合はキャッシュを再構築するために使用されます) (一度にキャッシュを再構築する必要があるだけなので)その間、アプリケーションにヒットするすべてのリクエストではなく、再構築されるまで)?

4

1 に答える 1

0

コンテンツを更新するプロセスでキャッシュを更新します(つまり、管理パネル/ cms /何でも)。サイト管理者にとっては、2 秒の待ち時間はまったく問題ありません。

于 2012-10-10T09:15:09.737 に答える