キャッシングにより、WebCenter Sitesのページ提供のパフォーマンスが向上します。レンダリングされたコンテンツをキャッシュすることにより、コンテンツが要求されるたびにレンダリングする必要がなくなります。これにより、WebCenter Sitesシステムのハードウェア要件が軽減され、キャッシュされていないコンテンツをクライアントが要求する回数が減り、最終的に応答時間が短縮します。
キャッシング・システムには複数のレイヤーがあります。これにより、キャッシュされたオブジェクトの再生成を1つのキャッシュ・レベルで実行でき、その一方で、別のキャッシュ・レベルにキャッシュされたコンテンツがクライアントに提供されます。WebCenter Sitesは内部レベルのキャッシュで構成され、Satellite Serverは外部レイヤーのキャッシュで構成されます。
この章では、レンダリングされたオブジェクトのキャッシングがWebCenter Sitesプラットフォームでどのように行われるかについて説明します。ページとBLOBがどのようにキャッシュされるか、どこにキャッシュされるか、WebCenter SitesとSatellite Server両方のシステムでどのようにキャッシュから取得されるかについて説明します。
この章には次の項が含まれます。
WebCenter SitesとSatellite Serverでは両方とも、ページ、ページレットおよびBLOBがキャッシュされます。WebCenter Sitesには、CSページ・キャッシュ、BlobServerキャッシュ、SSキャッシュという3種類のレンダリング・エンジン・キャッシュが用意されています。これらのキャッシュはみな制御可能です。次のように構成したり、空にしたりできます。
キャッシュの最大サイズを構成できます。詳細および手順は、第7.1.1項「キャッシュの最大サイズの構成」を参照してください(WebCenter Sitesキャッシュ、BlobServerキャッシュおよびSatellite Serverキャッシュ)。
オブジェクトは有効期限情報とともにキャッシュに格納できるので、キャッシュでオブジェクトの有効期限が切れると、そのオブジェクトは削除されます。詳細および手順は、第7.1.2項「個々のエントリの有効期限の設定」を参照してください(WebCenter SitesキャッシュおよびBlobServerキャッシュ)。
オブジェクトは手動で、またはCacheManagerを使用して自動的に、キャッシュから明示的に削除できます。詳細および手順は、第7.1.3項「キャッシュからのエントリの明示的削除」を参照してください(WebCenter Sitesキャッシュ、BlobServerキャッシュおよびSatellite Serverキャッシュ)。
WebCenter Sitesページ・キャッシュには、2つのレベルのキャッシングがあります。
データベース内。
メモリー内。メモリー・キャッシュは、データベース・キャッシュの透過的なサブセットですが、単独での構成が可能です。
この項では、各キャッシュの主な構成設定について説明します。この項は、次のトピックで構成されています。
WebCenter Sitesのデータベース・キャッシュには、最大サイズ構成オプションはありません。
ページ・キャッシュのメモリー・サブセットにより、futuretense.ini
ファイルのcs.SystemPageCacheCSz
プロパティを使用して、キャッシュできるエントリの最大数を指定できます。正の整数を設定すると、キャッシュ二存在できるエントリの最大数が指定されます(キャッシュでは、最大サイズに達したときに削除されるエントリを特定するために、最低使用頻度(LRU)アルゴリズムが使用されます)。
注意: 値を
|
最大サイズは、キャッシュに格納される総バイト数とは関係ありません。
WebCenter Sitesページ・キャッシュ内での個々のエントリのライフタイムは、各エントリのcscacheinfo
設定により決定されます。CacheInfoオブジェクトは、cscacheinfoフィールドに明示的に設定されていなければ、構成ファイルから値が取得されます。CacheInfoの構文については、第7.4項「CacheInfo文字列の構文」を参照してください。
WebCenter Sitesには、キャッシュからエントリを削除する方法が2つ用意されています。1つは手動、もう1つはCacheManagerを使用した自動的な方法です。
手動削除
ページ・キャッシュからエントリを手動で削除できます。CacheServerサーブレットを使用できます。CacheServerには、次の2つのオプションが用意されています。
キャッシュ全体をフラッシュします。
有効期限が切れた時点で、すべてのページのフラッシュを強制フラッシュします。CacheServerのすべてフラッシュする機能を起動するためには、SiteCatalog
表を破棄する権限を持つユーザーとしてログインし、CacheServerサーブレットの起動時にパラメータall=true
を指定する必要があります。パラメータを指定しないと、有効期限が切れたエントリ(有効期限が過去であるエントリ)がすべて、キャッシュからただちにクリアされます。有効期限がまだ切れていないエントリはクリアされません。
注意: 有効期限が切れたエントリは、たとえまだデータベース表の中にあったとしても、キャッシュから提供されることはありません。WebCenter Sitesでは、ページを表示する前に、キャッシュから取得されたすべてのページの有効期限がチェックされます。有効期限が切れたページをWebCenter Sitesが表示しようとすると、そのページはただちにキャッシュから削除され、新しいページが生成されます。 |
自動削除
CacheManagerは、WebCenter SitesのページおよびBLOBのキャッシュ・メカニズム内部と密接に結びついているモジュールです。このツールにより、ページにロードされたアイテム、ページの有効期限、またはページに渡されるパラメータに基づいて、すべてのレンダリング・キャッシュのコンテンツを管理できるようになります。
CacheManager自体は、完全に独立したドキュメントの対象になる場合もあります。ただし、その機能の概要はここで説明します。CacheManagerのメソッドおよび必要な引数の詳細は、COM.FutureTense.Cache.CacheManager Javadocを参照してください。
CacheManager
は、2つのコンストラクタのうちのいずれかを使用してインスタンス化されます。そのうちの1つのコンストラクタは、現在登録されているすべてのSatellite ServerでCacheManager
を設定します。もう1つのコンストラクタでは、このCacheManager
のインスタンスが実際に管理するSatellite Serverを指定できます。
次に、ページとBLOBをCacheManager
に移入する必要があります。これは、次のメソッドのいずれかを使用して実行します。
setByCachedDate(ICS ics, boolean before, String timestamp) setByItemDate(ICS ics, boolean before, String timestamp) setPagesByArg(ICS ics, String paramName, String paramValue) setPagesByID(ICS ics, String[] ids)
ページ・キャッシュ、BLOBキャッシュおよびSatelliteキャッシュのコンテンツは、互いに密接に結びついています。構成エラーがないかぎりは、Satellite Serverにキャッシュされたオブジェクトは、WebCenter Sitesキャッシュにも常に存在します。つまり、WebCenter Sitesでは、すべてのレンダリング・エンジン・キャッシュにすべてのエントリのレコードがあります。CacheManagerは、各キャッシュに直接情報を明示的に問い合せることなく、各キャッシュのコンテンツを管理できるようにするために、このレコードを使用します。
setByCachedDate(ICS ics, boolean before, String timestamp)
このメソッドでは、エントリが最後にキャッシュに追加された日付に基づいて、CacheManagerにエントリを移入できます。指定された日の前または後に変更されたエントリのすべてを移入するかどうかを選択できます。
setByItemDate(ICS ics, boolean before, String timestamp)
このメソッドでは、エントリのアイテムが最後に変更された日付に基づいて、CacheManagerにエントリを移入できます。setByCachedDate(ICS, boolean, String)
と同様、指定された日の前または後にアイテムが変更されたエントリのすべてを移入するかどうかを選択できます。
setPagesByArg(ICS ics, String paramName, String paramValue)
このメソッドでは、(pagenameを含む)キャッシュ・キーにある名前と値のペアに基づいて、CacheManagerにエントリを移入できます。
setPagesByID(ICS ics, String[] ids)
このメソッドでは、キャッシュ内のページまたはBLOBに格納されたアイテムの正確なアイテムIDに基づいて、CacheManagerにエントリを移入できます。
完全に移入されると、CacheManagerはキャッシュのコンテンツを管理できるようになります。これは、次の4つの主なサービス・メソッドのうちのいずれかを使用して実行します。
flushCSEngine(ICS ics, int mode)
このメソッドでは、WebCenter Sitesのページ・キャッシュとBLOBキャッシュから、CacheManagerに現在移入されているページとBLOBのすべてをフラッシュします。
flushSSEngines(ICS ics)
このメソッドでは、Satellite Serverキャッシュから、CacheManagerに現在移入されているページとBLOBのすべてをフラッシュします。これは、適切な<page>
タグおよび<blob>
タグが埋め込まれたHTTPリクエストを、FlushServerサーブレットに送信することにより実行されます。Satellite Serverはこれらのタグを解釈し、キャッシュ・キーに変換して、対応するページをキャッシュからフラッシュします。
refreshCSEngine(ICS ics, int mode)
このメソッドでは、オブジェクトを再生成してキャッシュに自動的に再移入するリクエストを、(ICS.ReadPage
またはICS.BlobServer
を使用して)送信します。
refreshSSEngines(ICS ics)
このメソッドでは、HTTP経由でSatellite Serverにリクエストを送信して、ページを読み込ませます。返されたバイトは無視されますが、結果として、Satellite Serverキャッシュに再移入されます。
これらのメソッドを使用すると、パフォーマンスがきわめて高い動的サイトを可能にするツールである、二重バッファ・キャッシングを利用できます。二重バッファ・キャッシングの詳細は、第5章「ページのデザインとキャッシング」を参照してください。
BlobServerキャッシュは、オール・オア・ナッシングのキャッシュです。つまり、エントリはグローバルにキャッシュされるか、グローバルにキャッシュされないかのどちらかです。
セキュリティが有効な場合は、BlobServerキャッシングが無効になります。したがって、bs.security=true
である場合、キャッシングは無効化されます。
この項の内容は、次のとおりです。
futuretense.ini
内のプロパティbs.bCacheSize
は、BLOBキャッシュが収容するエントリの数を指定します。サイズに負の数が設定されると、BLOBキャッシュを無制限に増大することが許可されます。
BlobServerは、キャッシュされたエントリに対して、個々のエントリの有効期限をサポートしていません。キャッシュされたオブジェクトはすべて、futuretense.ini
内のbs.bCacheTimeout
プロパティで決められたタイムアウトの期間、キャッシュ内に存在します。負のタイムアウト値は、エントリがタイムアウトしないことを示します。正の整数は、オブジェクトがキャッシュ内に存在する期間(単位は分)を指定します。
BlobServerは、個々のエントリおよびすべてのエントリのキャッシュからのフラッシュをサポートします。
手動削除
キャッシュからエントリを手動で削除するには、blobtable
パラメータの名前をflushblobtable
に変更するのみです。これにより、残りのパラメータに対応するエントリがキャッシュから削除されます。
キャッシュからすべてのエントリを手動で削除するには、2つのオプションがあります。1つは、パラメータflushblobtables
(s
に注意)でBlobServerサーブレットを起動する方法です。もう1つは、前述のようにCacheServerサーブレットを起動する方法です。ただし、すべてのページとすべてのBLOBがキャッシュからフラッシュされます。
自動削除
BLOB依存アイテムはBLOBリンクが生成されたときに記録されるため、ページと同様に、BLOBを管理するためにCacheManagerを起動できます。(実際、CacheManagerは常にBLOBとページを一緒に管理します)。CacheManagerの使用の詳細は、CacheManagerおよびWebCenter Sitesに関する項を参照してください。
注意: BLOBを提供する前に、開発者はアセットのステータスをチェックする必要があります。これにより、アセットが無効化された後に、BlobServerによってBLOBが提供されるという問題を回避できます(この動作は、ベーシック・アセットでのみ発生します)。 |
Satellite Serverの汎用キャッシュ構成は、satellite.properties
ファイルで行います。ただし、キャッシュ構成は通常、オブジェクトごとにオーバーライドされます。
この項では、キャッシュの最大サイズの構成方法と、キャッシュからのエントリの明示的な削除方法(手動削除および自動削除)について説明します。
キャッシュの最大サイズの構成
一度にキャッシュに格納できるエントリの最大数は、satellite.properties
ファイルのcache_max
プロパティを使用して構成できます。このプロパティに負の整数を設定すると、キャッシュのサイズは制限されません。正の整数は、キャッシュに格納できるエントリの最大数を指定します。
キャッシュからのエントリの明示的削除
この項で説明しているように、個々のエントリは、手動で、またはCacheManagerを使用して、Satellite Serverキャッシュから削除できます。
手動削除: Satellite Serverには、FlushServerと呼ばれるサーブレットがあります。(username、password、resetの各パラメータを指定して)このサーブレットにGET
リクエストを送信することにより、Satellite Serverキャッシュのコンテンツのすべてをフラッシュできます。GET
を使用して個々のエントリはフラッシュできません。
自動削除: 前述のように、CacheManagerを使用してSatellite Serverキャッシュをフラッシュできます。前述のように、対応するオブジェクトがWebCenter Sitesにキャッシュされた場合、CacheManagerはSatellite Serverのエントリのみをフラッシュすることができます。これは、WebCenter SitesがSatellite Serverキャッシュのコンテンツを追跡する方法によるものです。
前述のように、対応するオブジェクトがWebCenter Sitesにキャッシュされているかぎりは、CacheManagerを使用してSatellite Serverキャッシュをフラッシュすることができます。対応するオブジェクトが必要となるのは、WebCenter SitesがSatellite Serverキャッシュのコンテンツを追跡する方法によるものです。
Satellite Serverキャッシュを処理するための該当するCacheManagerメソッドは、flushSSEngines()
およびrefreshSSEngines()
です。メソッドの詳細は、第7.1.3項「キャッシュからのエントリの明示的削除」を参照してください。
SiteCatalogのcscacheinfo
フィールドおよびsscacheinfo
フィールドには、CacheInfo文字列が移入されます。この項では、文字列のフォーマットについて説明します。これは、2つの部分をカンマで区切った文字列です。最初の部分は、ページがキャッシュされるかどうかを示します。2番目の部分は、有効期限を記述します。
サンプル値:
false true true,* true,~4 true,@1987-06-05 04:32:10 true,#00:00:00 */*/* * (blank)
CacheInfo文字列: 最初の部分
CacheInfoの最初の部分は、次の値のいずれかである必要があります。
false true (blank)*
値がfalse
の場合、ページはキャッシュされません。
値がtrue
の場合、2番目のエレメントに指定された情報に従って、ページがキャッシュされます。
値が空白の場合、WebCenter Sitesはfuturetense.ini
のプロパティcs.alwaysusedisk
を参照します。このプロパティがyes
に設定されている場合、空白値はtrue
と同じ動作をするものと解釈されます。この値がno
(デフォルト値)に設定されている場合、空白値はfalse
と同じ動作をするものと解釈されます。
値が*の場合、これは空白として処理されます。
CacheInfo文字列: 2番目の部分
CacheInfoの2番目の部分は、キャッシュされるページをキャッシュからいつ削除するかを記述します。最初のエレメントがfalse
の場合(またはfalse
と解釈される場合)、2番目のエレメントは無視されます。
ページの有効期限を指定する方法には、次の3つがあります。
page timeout
(in minutes)
instant in time expiration
cron-like TimePattern expiration
有効な値は次のとおりです。
~<number of minutes> @<date in JDBC format> #<COM.FutureTense.Util.TimePattern format> * (blank)
ページ・タイムアウト
2番目のエレメントがチルダ(~)で始まる場合、チルダ記号(~)の次の値は整数である必要があります。この整数の値は、ページが最初に作成されてからキャッシュ内に残る期間(単位は分)です。負の値または0は、ページの有効期限が切れない(ページが永久にキャッシュ内に残る)ことを示します。
絶対時間
2番目のエレメントがアット記号(@
)で始まる場合、アット記号(@
)に続く値はJDBC日付文字列フォーマット、つまりYYYY-MM-DD HH:MM:SS
のフォーマットで表現される日付である必要があります。その日付が過ぎると、キャッシュされたページはキャッシュからフラッシュされ、そのページはキャッシュされていない状態になります。
TimePattern
TimePatternフォーマットは、ページ・キャッシュの有効期限の記述のためにサポートされています。2番目のエレメントがハッシュタグ(#
)で始まる場合、ハッシュタグ(#
)に続く値は、パブリック・クラスCOM.FutureTense.Util.TimePattern
で定義された有効なTimePattern文字列である必要があります。
一般的に、TimePattern構文は、ほとんどのUNIX cron表で使用されるフォーマットに対応しています。これにより、特定の時間または毎日、毎月、毎週、毎曜日および毎年で、有効期限を指定できます。
TimePatternフォーマットは、ページ有効期限のために最も広く使用されるフォーマットになると考えられています。
ワイルドカード
2番目のエレメントが*である場合、前のタイムアウトで記述したように、ページはタイムアウトによる有効期限切れの動作になります。タイムアウト値は、futuretense.ini
ファイルのcs.pgCacheTimeout
プロパティから読み込まれます。
空白
2番目のエレメントが空白の場合、*と同じ動作が適用されます。