5.7. Node.js のキャッシュの例
以下の例は、実稼働環境での実行を目的としていません。
制限: このサンプルアプリケーションを Minishift または CDK で実行します。手動ワークフローを使用して、このサンプルを OpenShift Online Pro および OpenShift Container Platform にデプロイすることもできます。この例は、現在 OpenShift Online Starter では使用できません。
キャッシュサンプルは、キャッシュを使用してアプリケーションの応答時間を長くする方法を示しています。
この例では、以下の方法を示しています。
- キャッシュを OpenShift にデプロイします。
- アプリケーション内でキャッシュを使用します。
5.7.1. キャッシュの仕組みおよび必要なタイミング リンクのコピーリンクがクリップボードにコピーされました!
キャッシュを使用すると、情報を保存して、一定期間アクセスできます。元のサービスを繰り返し呼び出すよりも、キャッシュの情報により速く、またはより確実にアクセスすることができます。キャッシュを使用する欠点は、キャッシュされた情報が最新ではないことです。ただし、キャッシュに保存されている各値に 有効期限 または TTL (time to live) を設定して、この問題を減らすことができます。
例5.3 キャッシュの例
service1 および service2 の 2 つのアプリケーションがあるとします。
Service1 は service2 からの値によって異なります。
- service2 からの値が頻繁に変更されると、service1 は一定期間 service2 からの値をキャッシュすることができます。
- キャッシュされた値を使用すると、service2 が呼び出される回数を減らすことができます。
- service1 が service2 から直接値を取得するのに 500 ミリ秒かかり、キャッシュされた値を取得するために 100 ミリ秒かかると、service1 はキャッシュされた各呼び出しにキャッシュされた値を使用することで 400 ミリ秒節約できます。
- service1 が service2 にキャッシュされていない呼び出しを 1 秒あたり 5 回 (10 秒以上) にすると、呼び出しは 50 になります。
- 代わりに service1 が 1 秒の TTL でキャッシュされた値の使用を開始した場合は、10 秒で 10 の呼び出しに削減されます。
キャッシュサンプルの仕組み
- cache、cute name、および greeting サービスがデプロイされ、公開されます。
- ユーザーは greeting サービスの Web フロントエンドにアクセスします。
- ユーザーは、Web フロントエンドのボタンを使用して greeting HTTP API を呼び出します。
greeting サービスは、cute name サービスの値によって異なります。
- greeting サービスは、最初にその値が cache サービスに保存されているかどうかを確認します。これがある場合は、キャッシュされた値が返されます。
- 値がキャッシュされていない場合、greeting サービスは cute name サービスを呼び出し、値を返し、その値を 5 秒の TTL で cache サービスに保存します。
- Web フロントエンドは、greeting サービスからの応答と、操作の合計時間を表示します。
ユーザーはサービスを複数回呼び出し、キャッシュされた操作とキャッシュされていない操作の違いを確認します。
- キャッシュされた操作は、キャッシュされていない操作よりもはるかに高速です。
- ユーザーは、TTL の有効期限が切れる前にキャッシュを強制的に消去することができます。