Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

Redis を使用して超高速パフォーマンスを実現する ASP.NET Core のマスター分散キャッシュ

Redis を使用して超高速パフォーマンスを実現する ASP.NET Core のマスター分散キャッシュ

はじめに

ASP.NET Core アプリケーションを構築する場合、最大の課題の 1 つはパフォーマンスです。アプリケーションが成長し、より多くのユーザーがそれを使用し始めると、データベースは同じデータに対して何度もヒットします。これにより、アプリケーションの速度が低下し、サーバーの負荷が増加します。

ここで、Redis による分散キャッシュが役立ちます。

毎回データベースを呼び出すのではなく、頻繁に使用するデータを Redis のような高速なインメモリ システムに保存します。次回誰かが同じデータをリクエストすると、そのデータはデータベースではなくキャッシュから即座に返されます。

このガイドでは、ASP.NET Core で Redis 分散キャッシュを使用する方法を簡単かつ実践的な方法で段階的に学習します。

分散キャッシュとは何ですか?

分散キャッシュとは、キャッシュされたデータをアプリケーションの外部 (通常は Redis などの別のサービス) に保存することを意味します。

通常の (メモリ内) キャッシュでは、データは単一のサーバー内に保存されます。アプリケーションが複数のサーバーで実行される場合、各サーバーには独自のキャッシュが存在するため、不整合が発生する可能性があります。

ただし、分散キャッシュでは次のようになります。

  • すべてのサーバーが同じキャッシュを共有します

  • データはアプリケーション全体で一貫性を保ちます

  • スケーラブルな環境でうまく機能します

簡単に言うと、分散キャッシュは、すべてのアプリケーション サーバーが使用できる共有メモリのようなものです。

Redis とは何ですか?

Redis は、キャッシュに広く使用されている非常に高速なインメモリ データ ストアです。

Redis は、次のような超高速辞書だと考えてください。

  • データはキーを使用して保存します

  • 同じキーを使用してデータを取得します

開発者が Redis を好む理由:

  • データをメモリに保存するため、非常に高速です。

  • シンプルなキーと値のストレージをサポートします

  • ASP.NET Core との統合は簡単です

  • スケーラブルなクラウドベースのアプリケーションに最適です

前提条件

開始する前に、次のものを用意していることを確認してください。

  • システムにインストールされている .NET SDK

  • 動作する ASP.NET Core プロジェクト

  • Redis をローカルにインストールするか、クラウド Redis サービスにアクセスする

  • ASP.NET Core のコントローラーとサービスの基本的な理解

Redis がローカルにインストールされていない場合は、Docker または任意のクラウド プロバイダーを使用できます。

ステップ 1:必要な NuGet パッケージをインストールする

まず、Redis キャッシュ パッケージをインストールする必要があります。

次のコマンドを実行します。

dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis

このパッケージは、ASP.NET Core アプリケーションを Redis に接続し、分散キャッシュのサポートを有効にします。

ステップ 2:ASP.NET Core で Redis を構成する

次に、アプリケーションに Redis への接続方法を指示する必要があります。

Program.cs を開きます ファイルを作成し、次の設定を追加します。

builder.Services.AddStackExchangeRedisCache(options =>
{
 options.Configuration = "localhost:6379";
 options.InstanceName = "SampleApp_";
});

簡単な説明:

  • localhost:6379 → これは Redis が実行されているアドレスです

  • InstanceName → すべてのキャッシュ キーにプレフィックスが追加されます (データの整理に役立ちます)

クラウド Redis を使用している場合は、localhost の値を接続文字列に置き換えます。

ステップ 3:IDistributedCache サービスを挿入する

ASP.NET Core は、IDistributedCache という組み込みインターフェイスを提供します。 Redis と連携します。

これをサービスまたはコントローラーに注入する必要があります。

public class ProductService
{
 private readonly IDistributedCache _cache;
 public ProductService(IDistributedCache cache)
 {
 _cache = cache;
 }
}

簡単に言うと、これによりクラスが Redis と通信できるようになります。

ステップ 4:データを Redis キャッシュに保存する

Redis にデータを保存するには、SetStringAsync を使用します。 メソッド。

public async Task SetCacheDataAsync(string key, string value)
{
 var options = new DistributedCacheEntryOptions
 {
 AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
 };
 await _cache.SetStringAsync(key, value, options);
}

ここで何が起こっているのか:

  • 一意のキーを使用してデータを保存しています

  • 有効期限 (10 分) を設定しています

有効期限が重要な理由:

  • 古いデータを防止

  • キャッシュをクリーンな状態に保ちます

  • メモリを節約します

ステップ 5:キャッシュからデータを取得する

Redis からデータを取得するには、以下を使用します。

public async Task<string> GetCacheDataAsync(string key)
{
 return await _cache.GetStringAsync(key);
}

データが存在する場合は即座に返されます。
そうでない場合は、null を返します。

これは、データベースを呼び出すよりもはるかに高速です。

ステップ 6:キャッシュアサイド パターンを実装する

キャッシュを使用する最も一般的な方法は、キャッシュ アサイド パターンです。

これは次のことを意味します:

<オル>
  • まずキャッシュを確認してください

  • データが存在する場合 → それを返す

  • そうでない場合 → データベースから取得してキャッシュに保存します

  • 例:

    public async Task<string> GetProductAsync(string productId)
    {
     string cacheKey = $"product_{productId}";
     var cachedData = await _cache.GetStringAsync(cacheKey);
     if (!string.IsNullOrEmpty(cachedData))
     {
     return cachedData;
     }
     var productData = "Product from Database";
     await _cache.SetStringAsync(cacheKey, productData, new DistributedCacheEntryOptions
     {
     AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5)
     });
     return productData;
    }
    

    このアプローチ:

    • データベース呼び出しを削減します

    • 応答時間の向上

    • 必要に応じて自動的にキャッシュを埋めます

    ステップ 7:複雑なオブジェクトの操作

    Redis はデータを文字列として保存するため、オブジェクトの場合は JSON に変換する必要があります。

    public async Task SetObjectAsync<T>(string key, T data)
    {
     var jsonData = JsonSerializer.Serialize(data);
     await _cache.SetStringAsync(key, jsonData);
    }
    public async Task<T> GetObjectAsync<T>(string key)
    {
     var jsonData = await _cache.GetStringAsync(key);
     return jsonData == null ? default : JsonSerializer.Deserialize<T>(jsonData);
    }
    

    簡単に言うと:

    • オブジェクトを変換 → JSON → Redis に保存

    • JSON を取得 → オブジェクトに変換し直す

    ステップ 8:キャッシュからデータを削除する

    場合によっては、古いキャッシュ データや間違ったキャッシュ データを削除する必要があることがあります。

    await _cache.RemoveAsync("product_1");
    

    これは次の場合に役立ちます。

    • データはデータベースで更新されます

    • キャッシュが無効になります

    ステップ 9:Redis キャッシュのベスト プラクティス

    Redis を効果的に使用するには、次の簡単な実践に従ってください。

    • 明確で一意のキャッシュ キーを使用する

    • 有効期限を常に設定する

    • 機密データをキャッシュしない

    • 非常に大きなオブジェクトの保管は避ける

    • キャッシュの使用状況とパフォーマンスを監視する

    これらのプラクティスは、パフォーマンスを維持し、後で問題を回避するのに役立ちます。

    ステップ 10:一般的な使用例

    Redis キャッシュは一般的に次の目的で使用されます。

    • API レスポンスのキャッシュ

    • 製品リスト

    • ユーザーセッション

    • 頻繁にアクセスされるデータ

    • ダッシュボード データ

    データが頻繁に読み取られるが、変更の頻度が低い場合は、キャッシュの候補として適しています。

    ASP.NET Core で Redis を使用する利点

    Redis を使用すると、次のようないくつかの利点があります。

    • アプリケーションのパフォーマンスの高速化

    • データベース負荷の軽減

    • スケーラビリティの向上

    • ユーザー エクスペリエンスの向上

    これは、トラフィックの多いアプリケーションで特に役立ちます。

    概要

    ASP.NET Core の Redis を使用した分散キャッシュは、アプリケーションのパフォーマンスを向上させるシンプルかつ強力な方法です。データベースを繰り返し呼び出す代わりに、頻繁に使用されるデータを Redis に保存し、必要なときにすぐに取得します。段階的なアプローチに従い、キャッシュアサイドなどのパターンを使用し、ベスト プラクティスを適用することで、高速でスケーラブルで効率的なアプリケーションを構築できます。小規模から始めて、最も重要な場所にキャッシュを実装し、徐々にシステムを最適化してパフォーマンスを向上させます。


    1. Redis ZUNIONSTORE –Redisでソートされた設定値の和集合を実行する方法

      このチュートリアルでは、redis ZUNIONSTORE を使用して、redisデータストアに格納されている2つ以上の並べ替えられたセットの値に対して和集合演算を実行する方法について学習します。 コマンド。 セットの和集合: 集合論では、2つ以上の集合の和集合は、すべての集合に存在するすべての要素(個別)を含む集合です。例: A = {1, 2, 3, 4, 5}B = {4, 5, 6, 7, 8, 9}Union of A & B :-A U B = {1, 2, 3, 4, 5, 6, 7, 8, 9} ZUNIONSTOREコマンド:- このコマンドは、

    2. Redis ZREMRANGEBYLEX –値の範囲でソートされたセットの要素を削除する方法

      このチュートリアルでは、特定の範囲の値を持つソートされた設定値の要素を削除する方法について学習します。このために、Redis ZREMRANGEBYLEXを使用します コマンド。 ZREMRANGEBYLEXコマンド このコマンドは、ソートされた設定値のすべての要素を削除します。その値は(要素の文字列表現)です。 分の間にあります および最大 引数。ここでは、辞書式順序を強制するために、並べ替えられた設定値のすべての要素が同じスコアで挿入されます。 分 および最大 引数は()で始まる必要があります または[ 、ここで [ 閉じた間隔を指定します(包括的) および( オープン間隔を指定し