1. 概要 Web アプリケーションでは、一部のレポートの生成にはデータベースの計算に時間がかかる場合があります。また、一部の Web サイトは気象情報を提供するため、温度情報を取得するためにリモート サーバーにアクセスして SOAP 呼び出しを行う必要があります。これらはすべて、複雑な情報の例です。 Web ページに複雑な情報を追加しすぎると、Web サーバーやデータベース サーバーに過負荷がかかる可能性があります。 JSP コード ブロック バッファリングにより、開発者はあらゆる種類の複雑な情報を自由に追加できます。
JSP はタグ ライブラリ内の複雑な Java コードをカプセル化して実行できるため、JSP ページ ファイルの保守が容易になり、専門家以外の開発者にとっても JSP ページ ファイルの使用がより便利になります。商用製品またはオープンソース製品のタグ ライブラリがすでに多数存在します。しかし、これらの製品のほとんどは、単純な Java Scriptlet で実装できる機能を実装するためにタグ ライブラリを使用するだけであり、JSP カスタム タグ ライブラリが登場する前に、ほとんど同じ機能を提供するいくつかの製品はありませんでした。
OpenSymphony によって設計された OSCache タグ ライブラリは、既存の JSP ページ内で高速メモリ キャッシュを提供する画期的な JSP カスタム タグ アプリケーションです。さまざまな形でキャッシュ製品を提供するベンダーがいくつかありますが、それらはすべてベンダー固有の製品です。 OSCache は、JSP 1.1 準拠のサーバー上で実行でき、既存の JSP コード ブロックをすべてのユーザーだけでなく、ユーザーごとにキャッシュすることもできます。 OSCache には、ディスクへのバッファリング、プログラム可能なバッファ フラッシュ、例外制御など、スケーラビリティを向上させるいくつかの高度な機能も含まれています。さらに、他の OpenSymphony 製品と同様に、OSCache のコードはオープン ソース ライセンスの下で自由に配布されます。
この記事では、架空のオークション Web サイトのデザインプロセスを例として、OSCache の作業プロセスを紹介します。この仮想 Web サイトには次のものが含まれます。
1: 最近のオークション活動を報告する管理ページ。
2:充実した機能と各種プロモーション情報を備えたホームページ。
3: まだ完了していないユーザーのオークション情報がすべて含まれる特別なナビゲーション バー。
2. 管理ページ
オークション Web サイトには管理レポートが含まれており、データベース サーバーがそのレポートを作成するのに数秒かかります。複数の管理者がシステムの動作を監視している可能性があり、管理者がアクセスするたびにレポートを再生成することは避けたいため、レポートの生成に時間がかかることが重要です。これを実現するには、ページ全体をアプリケーション レベルのバッファ タグにカプセル化し、1 時間ごとに更新します。他のベンダーの一部の製品にも同様の機能がありますが、OSCache の方が優れているというだけです。
わかりやすくするために、フォーマットの問題にはあまり焦点を当てません。管理ページを作成するときは、まずタグ ライブラリ宣言をページに追加します。
<%@ taglib uri="cachetags" prefix="cache" %>
次に、ページ全体をキャッシュ タグで囲む必要があります。キャッシュ タグのデフォルトのキャッシュ時間は 1 時間です。
<cache:cache> .... 複雑な管理レポート.... </cache:cache>
管理ページがキャッシュされました。管理者がページの生成後 1 時間以内に同じページに再度アクセスすると、以前にキャッシュされたページが表示されるため、データベース サーバーがこのレポートを再度生成する必要はありません。
3. ホーム ページ オークション Web サイトのトップ ページには、Web サイトの活動が表示され、終了間近のオークションが宣伝されます。進行中のオークションの数、現在ログインしているユーザーの数、近い将来終了予定のオークションのリスト、および現在時刻を表示したいと考えています。これらのメッセージには、異なる時間精度要件があります。ウェブサイト上のオークションは通常数日間続くため、有効なオークション数をバッファする時間を 6 時間に設定できます。ユーザー数は明らかにより頻繁に変化しますが、ここではこの値を一度に 15 分間バッファーします。最後に、ページに表示される現在時刻が常にページにアクセスされた正確な時刻になるようにします。
ホーム ページでタグ ライブラリを宣言した後、まずバッファリングせずに現在の日付を直接出力します。
現在は次のようになります: <%=new java.util.Date()%>
次に、オークションに出品される日付のリストを表示します。
<cache:cache> <ul> <% // 最近のオークションを含むイテレータを構築します。
Iterator Auctions = .... while (auctions.hasMore()) { Auction Auction = (Auction) Auctions.next (); %><li><%=auction%></li%< } %> </ul> </cache:cache>
最後に、進行中のオークションの数を表示したいのですが、この Numbers は6時間バッファリング。キャッシュ マーキングにはデータをバッファする秒数が必要なため、6 時間を 21600 秒に変換します。
<cache:cache time="21600"> <% //データベースにクエリを実行して、オークション アクティビティの合計数を取得します。 int AuctionCount = .. .. %> この Web サイトでは <%=auctionCount%> 進行中のオークションが行われています! </cache>
ご覧のとおり、複雑なバッファリング システムを備えたホームページを構築するために使用するコードはほんのわずかです。このバッファリング システムはページの各部分を個別にバッファリングし、各部分のバッファリング時間はそれぞれの情報の変更頻度と完全に一致します。バッファリングのおかげで、ホームページにさらに多くのコンテンツを配置できるようになりました。これまでバッファリングを行わなかった場合、ホームページにコンテンツを置きすぎると、ページのアクセスが遅くなり、データベース サーバーに過度の負荷がかかる可能性もあります。
4. ナビゲーション バー Web サイトを計画するときに、ショッピング カートの内容を左側のナビゲーション バーの下に表示することに決めたとします。ユーザーによるオークションの各商品の入札数と現在の価格、および現在のユーザーが最も高い入札をしたすべての商品のリストが表示されます。
セッション レベルのバッファリング機能を使用して、ナビゲーション バーに上記の機能を構築します。 Web サイト内の他のページがこのナビゲーション バーを参照できるように、次のコードをテンプレートまたはインクルード ファイルに追加します。
<cache:cache key="navbar"scope="session" time="300"> <% //抽出して表示します。現在の入札情報%> </cache:cache>
ここでは、キーとスコープという 2 つの重要な属性を紹介します。この記事の前半のコードでは、キャッシュ タグがコード ブロックの一意のキーを自動的に作成できるため、このキー属性を手動で設定する必要はありません。ただし、ここでは、このキャッシュされたコード ブロックをサイトの残りの部分から参照したいため、キャッシュ タグの key 属性を明示的に定義します。 2 番目に、scope 属性は、現在のコード ブロックをすべてのユーザーに対して 1 回バッファリングするのではなく、ユーザーごとにバッファリングする必要があることをキャッシュに指示するために使用されます。
セッション レベルのバッファリングを使用する場合は十分に注意する必要があります。これは明らかです。複雑なナビゲーション バーを使用してサーバーの負荷を 5 分の 1 または 10 分の 1 に減らすことはできますが、セッションごとに必要なメモリ スペースは大幅に増加します。 CPU 機能の観点から同時ユーザー数を増やすのは間違いなく理想的ですが、メモリ サポート能力の観点から同時ユーザー数が CPU の限界まで減少すると、このソリューションは理想的ではなくなります。
この記事の前半で述べたように、このバッファされたコード ブロックをサイトの残りの部分から参照したいと考えています。これは、ユーザーがオークションにアイテムを追加したり、他のユーザーがオークションに出品したアイテムに入札したりするときに、次回読み取られるときにナビゲーション バーに最新のコンテンツが含まれるようにバッファを更新する必要があるためです。このデータは他のユーザーのアクティビティによって変更される可能性がありますが、サイト上でアクションを実行した後も自分のリストが変更されていないことを確認すると、ユーザーは非常に混乱する可能性があります。
OSCache ライブラリによって提供されるフラッシュ タグは、バッファの内容をリフレッシュできます。この領域に影響を与える可能性のあるユーザー アクションを処理する次のコードをページに追加できます:
<cache:flush key="navbar"scope="session" />
ユーザーが次回アクセスすると、navbar バッファ ブロックが更新されます。 。
これまでのところ、サンプル Web サイトの構築は完了し、実行を開始できるようになりました。 OSCache の例外処理機能を見てみましょう。バッファ ブロック内で Java 例外が発生するなど、バッファされたコンテンツが無効になった場合でも、OSCache タグ ライブラリを使用すると、プログラムでコンテンツを表示できます。この例外制御機能を使用すると、データベース サーバーと Web サーバー間の接続を切断できますが、Web サイトは引き続き実行できます。 JSP 1.2 仕様では TryCatchFinally インターフェイスが導入され、タグ自体が Java 例外を検出して処理できるようになります。したがって、マークアップをこの例外処理コードと組み合わせて、JSP ページをよりシンプルかつ整理することができます。
OpenSymphony は、追加のバッファリング メカニズムと、バッファリングによって使用される RAM とディスク領域を管理できる、より管理しやすいメイン システムを実装することを計画しています。これらの機能が導入されると、Web サイトの応答性と信頼性をさらに向上させることができるようになります。
使用例:
oscache.properties ファイル構成ウィザード、
cache.memory
値は true または false です。デフォルトではメモリにキャッシュされます。
false に設定すると、キャッシュはデータベースまたはハード ディスクにのみキャッシュできるため、キャッシュの意味は何ですか
:)
キャッシュ要素の数
cache.persistence.class
永続キャッシュクラスで、このクラスがオンの場合、
クラスタ設定情報に関連するcache.path情報cache.clusterを設定する必要があります。
のように
cache.cluster.multicast.ip はブロードキャスト IP アドレスです。
cache.cluster.properties はクラスターのプロパティです。
3. OSCache cache1.jsp の基本的な使い方は
以下のとおりです。
<%@ page import="java.util.*" %>
<%@ taglib uri="oscache" prefix="キャッシュ" %>
<html>
<body>
キャッシュされた日付はありません: <%= new Date() %><p>
<!--自動更新-->
<キャッシュ:キャッシュ時間="30">
キャッシュされた日付を 30 秒ごとに更新します: <%= new Date() %>
</キャッシュ:キャッシュ>
<!--手動更新-->
<キャッシュ:キャッシュキー="テストキャッシュ">
キャッシュされた日付を手動で更新します: <%= new Date() %> <p>
</キャッシュ:キャッシュ>
<a href="/cache2.jsp">手動更新</a>
</body>
</html>
cache2.jsp は次のようにページの手動更新を実行します。
<%@ taglib uri="oscache" prefix="キャッシュ" %>
<html>
<body>
キャッシュはフラッシュされました...<p>
<cache:flush key="testcache"scope="application"/>
<a href="/cache1.jsp">Return</a>
</body>
</html>
次のステートメントを使用して Cache の有効スコープを定義することもできます。スコープを定義しない場合、スコープはデフォルトで Applcation になります。
<キャッシュ:キャッシュ時間="30" スコープ="セッション">
...
</cache:cache>
4. キャッシュ フィルター CacheFilter
web.xml でキャッシュ フィルターを定義して、特定のリソースのキャッシュを定義できます。
1 <フィルター>
2 < フィルター - 名前 > CacheFilter </ フィルター - 名前 >
3 < フィルター - クラス > com.opensymphony.oscache.web.filter.CacheFilter </ フィルター - クラス >
4 <初期パラメータ>
5 <param-name>時間</param-name>
6 < パラメータ - 値 > 60 </ パラメータ - 値 >
7 </init-param>
8 <初期パラメータ>
9 <param-name>スコープ</param-name>
10 <param-value>セッション</param-value>
11 </init-param>
12 </フィルター>
13
14
15 <フィルターマッピング>
16 < フィルター - 名前 > CacheFilter </ フィルター - 名前 >
17 < URL - パターン >* .jsp </ URL - パターン >
18 </ フィルター - マッピング >
上記の定義では、すべての .jsp ページがキャッシュされ、キャッシュ更新時間は 60 秒、キャッシュ スコープはセッションです。CacheFilter
は、HTTP ヘッダーが 200 のページ要求のみをキャプチャします。つまり、エラーのない要求のみをキャッシュします。
他のリクエスト (500、404、400 など) をキャッシュする代わりに、
[結論] OSCache は、よりカラフルでパフォーマンスの高い Web サイトを構築するのに役立ちます。 OSCache タグ ライブラリの助けを借りて、これを使用して、トラフィックのピーク期間やデータベース サーバーの過負荷など、Web サイトの応答性に影響を与えるいくつかの問題を解決できるようになりました。
個人的なヒント: Struts やその他の MVC アーキテクチャを使用している場合、oscache タグによってもたらされるパフォーマンスの向上を享受することは困難です。これは、各リクエストを処理のためにアクション (dao など) に送信する必要があるためです。そのため、キャッシュを使用する必要があります。 、Spring のインターセプターのメソッドレベルのキャッシュなど、他のメソッドが必要です...すべてのビジネス処理コードが JSP ページで記述されている場合は、キャッシュ タグを使用して、以前に生成されたページ データをキャッシュして、同じビジネス操作の実行を避けることができます。