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

C# で Azure Redis Cache をマスターする:実践ガイド

はじめに

Azure Redis Cache は、オープン ソースのインメモリ Redis Cache に基づいており、Web アプリがバックエンド データ ソースからデータをキャッシュに取り込み、キャッシュから Web ページをサーバーに取り込んでアプリのパフォーマンスを向上させることができます。このステップバイステップのチュートリアルでは、Web アプリで Azure Redis Cache を使用する方法を学習します。

Azure Redis Cache とは何ですか?

最新のアプリケーションはほとんどの場合、大量のデータを処理します。このシナリオでは、データベースからデータを取得すると、通常はテーブルが検索され、その結果がユーザーに返されます。このような場合、複数のリクエストによりパフォーマンスが低下します。したがって、リクエストの数をある程度減らすために、頻繁に変更されないキャッシュ データを使用できます。

Redis Cache は、キーと値の形式を使用してキャッシュ メモリ内のデータを取得して保存することにより、アプリケーションのパフォーマンスを向上させるために使用されるオープン ソースのメモリ内データベースです。Azure Redis Cache は、安全で低遅延、高パフォーマンスのスループットへのアクセスを提供する機能が豊富な機能です。

C# を使用して Redis Cache の実装を始めましょう。

ステップ 1. Azure ポートにログインし、[データベース]>> [Redis キャッシュ] に移動します。

ステップ 2. ニュース Redis キャッシュを作成します。

ステップ 3. 新しく作成された Redis キャッシュに接続するためのアクセス キーを取得します。

C# で Azure Redis Cache をマスターする:実践ガイド

StackExchange.Redis をインストールします

ステップ 4. 次のコマンドを使用して、StackExchange.Redis NuGet パッケージをインストールします。

インストールパッケージ StackExchange.Redis

データを Redis Cache に保存し、Redis Cache からデータを取得するためのコーディングを開始しましょう。私たちは最近、Azure Document DB CRUD 操作のコードを確認しました。まだ読んでいない場合は、「Azure Document DB CRUD 操作」をクリックして読んでください。 CRUD操作のコードはDocument DBにあります。ここで、Redis Cache を実装します。

ステップ 5. 前の記事と同様に、Redis Cache 接続文字列を appsettings.dev.json ファイルに追加する必要があります。

C# で Azure Redis Cache をマスターする:実践ガイド

ステップ 6. 次に、もう 1 つのプロパティ RedisCache を Config.cs に追加します。これにより、appsettings.dev.json から Redis Cache 接続文字列の値を取得します。

public class Config
{
 public DocDbConnectionString docDb { get; set; }
 public string RedisCache { get; set; }
}`
public class DocDbConnectionString
{
 public string EndPoint { get; set; }
 public string AuthKey { get; set; }
 public string Database { get; set; }
 public string Collection { get; set; }
}

ステップ 7. Program.cs ファイルに移動して、Redis Cache 用の ConnectionMultiplexer を追加しましょう。

IDatabase cache = lazyConnection.Value.GetDatabase();
private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
{
 string cacheConnection = configs.RedisCache;
 return ConnectionMultiplexer.Connect(cacheConnection);
});
public static ConnectionMultiplexer Connection
{
 get
 {
 return lazyConnection.Value;
 }
}

ここでは、ドキュメント DB にドキュメントを作成する際に、Key に基づいてドキュメントを Redis Cache に保存し、このドキュメントを読み込む際に、Key を使用してドキュメントが Redis Cache に存在するかどうかを確認します。 Document DB からドキュメントをさらに読み込むことは省略します。これにより、アプリケーションのパフォーマンスを向上させることができます。

var collection = UriFactory.CreateDocumentCollectionUri(configs.docDb.Database, configs.docDb.Collection);
try
{
 // create JObject which contains the employee details
 Console.WriteLine("\nCreating document");
 JObject emp = new JObject();
 emp.Add("id", "V003");
 emp.Add("name", "virendra");
 emp.Add("address", "Indore");
 emp.Add("Country", "India");
 // create the document into DocumentDb
 var createResponse = await Client.CreateDocumentAsync(collection, emp);
 var createdDocument = createResponse.Resource;
 Console.WriteLine("Document with id {0} created", createdDocument.Id);
 // Set JObject into redis cache with key "redisEmp3"
 var entryInRedis = await cache.StringSetAsync("redisEmp3", emp.ToString());
 Console.WriteLine("Document with key redisEmp3 stored into redis cache");
}
catch (Exception ex)
{
 throw ex;
}

ステップ 8. 代わりに、Redis キャッシュからドキュメントを読み取りましょう。

// Read document from Redis Cache.
var empInRedis = await cache.StringGetAsync("redisEmp3");
if (!empInRedis.IsNullOrEmpty)
{
 Console.WriteLine("Read Document from RedisCache {0} : ", empInRedis);
}
// If Redis Cache does not have Document, then read the document from Document DB
if (empInRedis.IsNullOrEmpty)
{
 var readResponse = await client.ReadDocumentAsync(UriFactory.CreateDocumentUri(configs.docDb.Database, configs.docDb.Collection, "V001"));
 var readDocument = readResponse.Resource;
 Console.WriteLine("Read Document {0}: ", readResponse.Resource.ToString());
}

以下のスナップショットは、Redis キャッシュからドキュメントを読み取る方法を示しています。

ステップ 10. 以下は、Program.cs クラスのコード全体です。

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json.Linq;
using StackExchange.Redis;
using Microsoft.Azure.Documents.Client;
public class Program
{
 private static IConfiguration Configuration { get; set; }
 private static Config configs;
 private DocumentClient client;
 private IDatabase cache = lazyConnection.Value.GetDatabase();
 static void Main(string[] args)
 {
 // Set up Configuration
 var builder = new ConfigurationBuilder()
 .SetBasePath(Directory.GetCurrentDirectory())
 .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: false, reloadOnChange: true);
 Configuration = builder.Build();
 configs = new Config();
 Configuration.Bind(configs);
 Program obj = new Program();
 obj.CRUDOperation().Wait();
 }
 // CRUD Operation
 private async Task CRUDOperation()
 {
 var collection = UriFactory.CreateDocumentCollectionUri(configs.docDb.Database, configs.docDb.Collection);
 try
 {
 // create JObject which contains the employee details
 Console.WriteLine("\nCreating document");
 JObject emp = new JObject();
 emp.Add("id", "V003");
 emp.Add("name", "virendra");
 emp.Add("address", "Indore");
 emp.Add("Country", "India");
 // create the document
 var createResponse = await Client.CreateDocumentAsync(collection, emp);
 var createdDocument = createResponse.Resource;
 Console.WriteLine("Document with id {0} created", createdDocument.Id);
 // Set JObject into redis cache with key "redisEmp3"
 var entryInRedis = await cache.StringSetAsync("redisEmp3", emp.ToString());
 Console.WriteLine("Document with key redisEmp3 stored into redis cache");
 }
 catch (Exception ex)
 {
 throw ex;
 }
 // read document from redis cache
 var empInRedis = await cache.StringGetAsync("redisEmp3");
 if (!empInRedis.IsNullOrEmpty)
 {
 Console.WriteLine("Read Document from RedisCache {0} : ", empInRedis);
 }
 if (empInRedis.IsNullOrEmpty)
 {
 // Read document from document Db
 var readResponse = await client.ReadDocumentAsync(UriFactory.CreateDocumentUri(configs.docDb.Database, configs.docDb.Collection, "V001"));
 var readDocument = readResponse.Resource;
 Console.WriteLine("Read Document {0}: ", readResponse.Resource.ToString());
 }
 }
 // Get a single instance of Document client and reuse
 public DocumentClient Client
 {
 get
 {
 if (client == null)
 {
 Uri endpointUri = new Uri(configs.docDb.EndPoint);
 client = new DocumentClient(endpointUri, configs.docDb.AuthKey, null, ConsistencyLevel.Session);
 client.OpenAsync();
 }
 return client;
 }
 }
 // To establish Redis Cache connection
 private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
 {
 string cacheConnection = configs.RedisCache;
 return ConnectionMultiplexer.Connect(cacheConnection);
 });
 public static ConnectionMultiplexer Connection
 {
 get
 {
 return lazyConnection.Value;
 }
 }
}

この記事がお役に立てば幸いです。


  1. Server‑Sent Events (SSE) を使用した Next.js でのリアルタイム LLM ストリーミング

    迅速に応答する AI を活用したアプリケーションは、瞬時に聞いたり見たりできるようにすることで、ユーザー エクスペリエンスを向上させます。ストリーミングを使用すると、クエリに即座に対応したり、パーソナライズされた推奨事項をリアルタイムで提供したりするチャットボットを作成できます。それはスピードだけではありません。ユーザーのニーズを迅速に満たし、その価値を高めることが重要です。 ストリーミングでは、データを 1 つの大きなブロックではなく、小さな連続したチャンクで送信します。チャットボットやレコメンデーション システムなどの AI アプリケーションのコンテキストでは、ストリーミングとは、応答全

  2. Redis HSTRLEN –ハッシュに含まれるフィールド値の長さを取得する方法

    このチュートリアルでは、キーに格納されているハッシュ値に含まれるフィールドの値の長さを取得する方法について学習します。このために、Redis HSTRLENを使用します コマンド。 HSTRLENコマンド このコマンドは、指定されたキーに格納されているハッシュ値のフィールドに関連付けられている値の長さ(文字数)を返します。キーが存在しない場合、またはキーは存在するがハッシュ値に指定されたフィールドが含まれていない場合はOが返され、キーは存在するがキーに格納されている値がハッシュデータ型ではない場合はエラーが返されます。 RedisHSTRLENコマンドの構文は次のとおりです。- 構文: