ホームページ >データベース >Redis >Redis と TypeScript を使用してキャッシュ侵入防御機能を開発する方法

Redis と TypeScript を使用してキャッシュ侵入防御機能を開発する方法

WBOY
WBOYオリジナル
2023-09-21 16:34:531220ブラウズ

Redis と TypeScript を使用してキャッシュ侵入防御機能を開発する方法

Redis と TypeScript を使用してキャッシュ侵入防御機能を開発する方法

キャッシュ侵入とは、対応するデータがないためにユーザーが存在しないデータをクエリした場合を指します。キャッシュ内のデータは毎回データベースに直接アクセスするため、データベースに過剰な負荷がかかります。この問題を解決するには、Redis と TypeScript を使用してキャッシュ侵入防御機能を開発します。

1. Redis のインストールと構成

まず、Redis をインストールして構成する必要があります。 Ubuntu システムでは、次のコマンドを使用して Redis をインストールできます:

sudo apt-get install redis-server

インストールが完了すると、Redis はローカル モードで実行され、デフォルトでデフォルト ポート 6379 をリッスンします。次に、使用する Redis のいくつかのパラメーターを構成する必要があります。

Redis 構成ファイルで、次の構成を見つけてコメントを外します:

# bind 127.0.0.1 ::1

これを次のように変更します:

bind 0.0.0.0

これにより、Redis は IP 上で実行できるようになります。ローカル モニター以外のアドレス。

構成ファイルを保存して終了し、Redis サービスを再起動します:

sudo service redis-server restart

2. TypeScript のインストールと構成

次に、TypeScript をインストールして構成する必要があります。まず、Node.js と npm がインストールされていることを確認します。

次に、次のコマンドを使用して TypeScript をグローバルにインストールします:

npm install -g typescript

新しい TypeScript プロジェクトを作成し、npm を初期化します:

mkdir cache-protection
cd cache-protection
npm init -y

必要な TypeScript の依存関係をインストールします:

npm install redis ioredis express
npm install --save-dev @types/redis @types/ioredis @types/express

3. コードの記述

##次に、キャッシュ侵入防御機能のコードの記述を開始します。まず、プロジェクトのルート ディレクトリに、index.ts という名前のファイルを作成します。

import express, { Request, Response } from 'express';
import Redis from 'ioredis';

const app = express();
const redis = new Redis();

// 缓存查询的函数
async function getDataFromCache(key: string): Promise<string | null> {
  return await redis.get(key);
}

// 从数据库查询数据的函数
async function getDataFromDb(key: string): Promise<string | undefined> {
  // 模拟从数据库查询的过程
  const dataFromDb = {
    '1': 'data1',
    '2': 'data2',
    '3': 'data3',
  };

  return dataFromDb[key];
}

// 将数据写入缓存的函数
async function setDataToCache(key: string, data: string): Promise<string> {
  return await redis.set(key, data);
}

// Express路由处理函数
app.get('/data/:id', async (req: Request, res: Response) => {
  const dataId = req.params.id;
  const cacheKey = `data:${dataId}`;

  // 尝试从缓存中获取数据
  let data = await getDataFromCache(cacheKey);

  // 如果缓存中没有数据,则从数据库中查询并写入缓存
  if (!data) {
    data = await getDataFromDb(dataId);
    if (data) {
      await setDataToCache(cacheKey, data);
    }
  }

  // 返回结果
  if (data) {
    res.send(data);
  } else {
    res.send('Data not found');
  }
});

// 启动Express服务
app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

コードの説明:

    最初に、express、redis、ioredis などの必要なライブラリをインポートします。
  1. Express インスタンスを作成し、Redis インスタンスを作成します。
  2. キャッシュからのデータの取得、データベースからのデータの取得、キャッシュへのデータの書き込みという 3 つの基本機能を実装します。
  3. リクエストを受信し、対応するデータを返す Express ルーティング処理関数を作成しました。
  4. Express サービスを開始し、ポート 3000 でリッスンします。
4. コードを実行します

コマンド ラインで次のコマンドを使用して、TypeScript コードを JavaScript にコンパイルします:

tsc index.ts

次に、コンパイルされた JavaScript を実行します。コード:

node index.js

これで、http://localhost:3000/data/1 にアクセスして、キャッシュ侵入防御機能をテストできます。最初のアクセスでは、データベースからデータが取得され、そのデータがキャッシュに書き込まれます。同じ URL に再度アクセスすると、キャッシュからデータが直接取得されます。

概要:

この記事では、Redis と TypeScript を使用してキャッシュ侵入防御機能を開発する方法を紹介します。キャッシュクエリ機能、データベースからのデータクエリ機能、データ書き込みキャッシュ機能を組み合わせることで、データベースへのアクセスを効果的に削減し、システムのパフォーマンスを向上させることができます。同時に、Redis の高速読み取りおよび書き込み機能により、同時アクセスが多い状況にも適切に対処できます。

この記事があなたの開発作業に役立つことを願っています。

以上がRedis と TypeScript を使用してキャッシュ侵入防御機能を開発する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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