Zend Framework の紹介

 Learning Zend Framework

appendix

 Zend Framework リファレンス


  • 第36章 Zend_Gdata
  • 第37章 Zend_Http
  • 第38章 Zend_InfoCard
  • 第39章 Zend_Json
  • 第40章 Zend_Layout
  • 第41章 Zend_Ldap
  • 第42章 Zend_Loader
  • 第43章 Zend_Locale
  • 第44章 Zend_Log
  • 第45章 Zend_Mail
  • 第46章 Zend_Markup
  • 第47章 Zend_Measure
  • 第48章 Zend_Memory
  • 第49章 Zend_Mime
  • 第50章 Zend_Navigation
  • 第51章 Zend_Oauth
  • 第52章 Zend_OpenId
  • 第53章 Zend_Paginator
  • 第54章 Zend_Pdf
  • 第55章 Zend_ProgressBar
  • 第56章 Zend_Queue
  • 第57章 Zend_Reflection
  • 第58章 Zend_Registry
  • 第59章 Zend_Rest

  • 第60章 Zend_Search_Lucene
  • 第61章 Zend_Serializer
  • 第62章 Zend_Server
  • 第63章 Zend_Service
  • 第64章 Zend_Session
  • 第65章 Zend_Soap
  • 第66章 Zend_Tag
  • 第67章 Zend_Test
  • 第68章 Zend_Text
  • 第69章 Zend_TimeSync
  • 第70章 Zend_Tool
  • 第71章 Zend_Tool_Framework
  • 第72章 Zend_Tool_Project
  • 第73章 Zend_Translate
  • 第74章 Zend_Uri
  • 第75章 Zend_Validate
  • 第76章 Zend_Version
  • 第77章 Zend_View
  • 第78章 Zend_Wildfire
  • 第79章 Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Translation 70.6% Update 2010-11-28 - Revision 23415

    17.2. キャッシュの仕組み

    Zend_Cache には、3 つのポイントがあります。まず最初は一意な ID (文字列) で、 これによってキャッシュレコードを識別します。二番目は、例に含まれる 'lifetime' ディレクティブです。これは、キャッシュされたリソースの 「賞味期限」を定義するものです。三番目のポイントとなるのが条件付きの実行処理で、 不要なコードを完全に読み飛ばすことで処理速度を向上させることになります。 フロントエンドの主となる関数 (例えば Zend_Cache_Core::get()) は、キャッシュがヒットしなかった場合には常に FALSE を返すよう設計されています。 そのため、キャッシュしたい (そして読み飛ばしたい) 部分を if(){ ... } 文で囲む際に、 条件式として Zend_Cache のメソッド自身を使用できるようになっています。 このブロックの最後では、出力内容を (例えば Zend_Cache_Core::save() などで) 保存する必要があります。

    [注意] 注意

    条件付きの実行処理を必ず記述しなければならないわけではありません。 フロントエンドの種類によっては (例えば Function など)、 すべてのロジックがフロントエンドの中で実装されています。

    [注意] 注意

    'Cache hit (キャッシュにヒットした)' とは、キャッシュレコードが見つかり、 かつそのレコードが 'fresh (新鮮)' (言い換えると、まだ有効期限が切れていない) 状態であることを表す言葉です。'Cache miss (キャッシュが見つからなかった)' はその正反対です。キャッシュが見つからなかった場合は、 データを (通常どおりに) 作成し、それをキャッシュしなければなりません。 一方、キャッシュにヒットした場合は、 バックエンドが自動的にキャッシュレコードを取得してくれます。

    17.2.1. Zend_Cache ファクトリメソッド

    使用可能な Zend_Cache フロントエンドのインスタンスを作成する方法を、 以下の例で示します。

    // バックエンドを選びます (例えば 'File' や 'Sqlite'...)
    $backendName '[...]';

    // フロントエンドを選びます (例えば 'Core'、'Output'、'Page'...)
    $frontendName '[...]';

    // 選択したフロントエンド用のオプションを配列に設定します
    $frontendOptions = array([...]);

    // 選択したバックエンド用のオプションを配列に設定します
    $backendOptions = array([...]);

    // インスタンスを作成します
    // (もちろん、最後の 2 つの引数は必須ではありません)
    $cache Zend_Cache::factory($frontendName,
                                 
    $backendName,
                                 
    $frontendOptions,
                                 
    $backendOptions);

    これ以降のドキュメントでは、$cache の中身が有効なフロントエンドになっているものとします。また、 選択したバックエンドにパラメータを渡す方法は理解できているものとします。

    [注意] 注意

    常に Zend_Cache::factory() を使用してフロントエンドの インスタンスを作成するようにしてください。フロントエンドやバックエンドを 自前で作成しようとしても、期待通りには動作しないでしょう。

    17.2.2. レコードのタグ付け

    タグは、キャッシュレコードを分類するための仕組みです。 save() メソッドでキャッシュを保存する際に、 適用するタグを配列で指定できます。これを使用すると、 指定したタグが設定されているキャッシュレコードのみを削除するといったことが可能となります。

    $cache->save($huge_data'myUniqueID', array('tagA''tagB''tagC'));
    [注意] 注意

    save() メソッドには、オプションの第四引数 $specificLifetime を指定できることに注意しましょう (FALSE 以外を指定することで、このキャッシュレコードの有効期限を特定の値に設定できます)。

    17.2.3. キャッシュの削除

    特定のキャッシュ ID を削除/無効化するには、remove() メソッドを使用します。

    $cache->remove('削除するID');

    一回の操作で複数のキャッシュ ID を削除/無効化するには、clean() メソッドを使用します。例えば、すべてのキャッシュレコードを削除するには次のようにします。

    <?php // すべてのレコードを削除します
    $cache->clean(Zend_Cache::CLEANING_MODE_ALL);

    // 有効期限切れのレコードのみ削除します
    $cache->clean(Zend_Cache::CLEANING_MODE_OLD);

    タグ 'tagA' および 'tagC' に該当するキャッシュエントリを削除するには、このようにします。

    $cache->clean(
        
    Zend_Cache::CLEANING_MODE_MATCHING_TAG,
        array(
    'tagA''tagC')
    );

    タグ 'tagA' にも 'tagC' にも該当しないキャッシュエントリを削除するには、このようにします。

    $cache->clean(
        
    Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
        array(
    'tagA''tagC')
    );

    タグ 'tagA' または 'tagC' に該当するキャッシュエントリを削除するには、このようにします。

    $cache->clean(
        
    Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
        array(
    'tagA''tagC')
    );

    削除モードとして指定可能な値は CLEANING_MODE_ALLCLEANING_MODE_OLDCLEANING_MODE_MATCHING_TAGCLEANING_MODE_NOT_MATCHING_TAG および CLEANING_MODE_MATCHING_ANY_TAG です。 後者は、その名が示すとおり、タグの配列と組み合わせて使用します。

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...