ホームページ  >  記事  >  ウェブフロントエンド  >  Nodejs がキャッシュを使用する方法

Nodejs がキャッシュを使用する方法

WBOY
WBOYオリジナル
2023-05-14 11:01:082400ブラウズ

インターネットの発展に伴い、ネットワークアプリケーションはますます複雑化し、アクセス要求もますます増加しています。アプリケーションのパフォーマンスを向上させるには、キャッシュが重要なオプションになっており、高速なサーバーサイド JavaScript 言語である Node.js も、キャッシュを使用する複数の方法をサポートしています。この記事では、Node.js がキャッシュを使用してアプリケーションのパフォーマンスを向上させる方法を紹介します。

1. キャッシュの基本原則

キャッシュでは、頻繁に使用されるデータをメモリまたはディスクに保存できます。データを使用する必要がある場合は、キャッシュから直接取得できるため、必要性が軽減されます。クエリ時間ごとに、システムの応答速度が向上します。キャッシュは通常、キーと値のペアの形式でデータを保存します。キーには任意のタイプのデータを使用でき、値には文字列、数値、JavaScript オブジェクト、またはその他のデータ型を使用できます。

Node.js では、コア モジュール cache を使用して独自のキャッシュを作成できます。このモジュールは次のメソッドを提供します:

  • cache.get(key): 指定されたキー値に対応するデータを取得します。
  • cache.set(key, value, ttl): 指定されたキーを識別子として使用して、指定された値をキャッシュに保存します。 ttl は生存時間 (英語では Time To Live) を表します。つまり、この時間内であればキャッシュからデータにアクセスできるということです。
  • cache.del(key): 指定されたキー値に対応するデータを削除します。
  • cache.clear(): すべてのキャッシュをクリアします。

Node.js の組み込みキャッシュ モジュールを使用してキャッシュされたデータは、現在のプロセス内でのみ共有でき、プロセス間で共有できないことに注意してください。プロセス間共有を実現する必要がある場合は、Memcached や Redis などのサードパーティのキャッシュ モジュールを使用できます。

2. Node.js の組み込みキャッシュ モジュールを使用する

実際の開発では、Node.js の組み込み cache モジュールを使用してキャッシュすることができます。データ。簡単な例を次に示します。

const cache = require('cache');
let data = null;

if (cache.get('data')) {
  data = cache.get('data');
} else {
  // 数据库查询操作
  data = db.query('SELECT * FROM users');
  // 将数据存储到缓存中,使用'users'作为键,存活时间为1小时
  cache.set('users', data, 3600);
}

// 使用data数据

上の例では、まずキャッシュからデータを取得しようとします。対応するキーが見つかった場合は、キャッシュ内のデータが直接使用されます。見つからない場合は、データベースがクエリされ、クエリされたデータがキャッシュに保存されて、データベース クエリの数が削減されます。このデータの存続時間は 1 時間です。有効期限が切れた後は、データベースに再クエリを実行して、キャッシュ内のデータを更新する必要があります。

3. Redis キャッシュを使用する

Node.js の組み込みキャッシュ モジュールを使用することに加えて、Redis などのサードパーティ キャッシュ モジュールを使用することもできます。 Redis は、インターネット アプリケーションのキャッシュを可能にするメモリベースのキャッシュ データベースです。 Redis キャッシュの使用例:

const redis = require('redis');
const client = redis.createClient();

let data = null;
client.get('users', (err, result) => {
  if (result) {
    data = result;
  } else {
    // 数据库查询操作
    data = db.query('SELECT * FROM users');
    // 将数据存储到Redis中,使用'users'作为键,存活时间为1小时
    client.setex('users', 3600, JSON.stringify(data));
  }
});

// 使用data数据

上記の例では、Redis の get メソッドを使用してデータを取得し、対応するキーが見つかった場合は、キャッシュが直接使用されます。データ入力。見つからない場合は、データベースにクエリを実行し、クエリされたデータを Redis に保存して、データベース クエリの数を減らします。このデータの生存時間は 1 時間です。有効期限が切れた後は、データベースを再クエリして、Redis のデータを更新する必要があります。

4. キャッシュ無効化処理

キャッシュされたデータは生存期間中は常に同じままですが、キャッシュされたデータの有効期限が切れると、データベースに再クエリを実行してキャッシュ内のデータを削除する必要があります。更新する必要があります。データのリアルタイム性を確保するために、タイマーを使用してキャッシュ内の期限切れデータを定期的にクリアできます。たとえば、5 分ごとにキャッシュをクリアします:

setInterval(() => {
  cache.clear();
}, 300000);

上記の例では、setInterval メソッドを使用して、キャッシュ内の期限切れデータを定期的にクリアします。時間間隔は 5 分です。つまり、5 分ごとのクリーニングです。

5. キャッシュ戦略

キャッシュを使用する場合、アプリケーションのパフォーマンスを向上させるためにいくつかのキャッシュ戦略を考慮する必要があります。

  1. キャッシュ削除戦略

キャッシュ削除戦略とは、キャッシュが特定のサイズに達するか、生存時間が特定の期間に達した後、いくつかの削除戦略を採用する必要があることを意味します。キャッシュ内のデータをクリーンアップします。一般的な削除戦略は次のとおりです。

  • FIFO (先入れ先出し): 最初にキャッシュに入ったデータをクリアします。
  • LIFO (後入れ先出し): キャッシュに入った最後のデータをクリアします。
  • LFU (最も最近使用されていない): 使用量が最も少ないデータを消去します。
  • #LRU (最近未使用): 最近未使用のデータをクリーンアップします。
実際の開発では、キャッシュ効率を向上させるために、特定のアプリケーション シナリオに応じてさまざまな削除戦略を採用できます。

    キャッシュ更新戦略
キャッシュ更新戦略とは、データベース内のデータが更新されたときに、キャッシュ内のデータがデータベース内のデータと確実に同期されるようにする方法を指します。が更新されます。一般的なキャッシュ更新戦略は次のとおりです。

  • キャッシュ アサイド (バイパス キャッシュ): データを読み取る必要がある場合、まずキャッシュからデータを検索し、見つかった場合は直接返します。そうでない場合は、データベースからクエリを実行し、クエリされたデータをキャッシュに保存し、データを返します。データを更新する必要がある場合、まずデータベースのデータを更新し、その後キャッシュからデータを削除し、再度データを読み込む場合には、再度データベースから読み込んでキャッシュのデータを更新します。
  • ライトスルー (ライトスルー キャッシュ): データを挿入または更新する必要がある場合、まずデータベース内のデータを更新し、次にそのデータをキャッシュに保存します。データを読み取る必要がある場合、まずキャッシュからデータを検索し、見つかった場合は直接返します。そうでない場合は、データベースからクエリを実行し、クエリされたデータをキャッシュに保存して、データを返します。データを削除する必要がある場合、まずデータベース内のデータを削除し、次にキャッシュからデータを削除します。

実際の開発では、特定のアプリケーション シナリオに応じてさまざまなキャッシュ更新戦略を採用して、キャッシュとデータベース間のデータの一貫性を確保できます。

6. 概要

キャッシュは、アプリケーションのパフォーマンスを向上させる重要な手段の 1 つです。 Node.js では、組み込みの cache モジュールを使用してキャッシュを実装することも、Redis などのサードパーティのキャッシュ モジュールを使用することもできます。キャッシュを使用する場合は、キャッシュの効率とデータの一貫性を向上させるために、キャッシュの削除戦略とキャッシュの更新戦略を考慮する必要があります。キャッシュによりアプリケーションのパフォーマンスが向上しますが、キャッシュのセキュリティと管理コストにも注意する必要があります。

以上がNodejs がキャッシュを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。