Redis OM .NETの紹介:.NET開発者のためのRedisオブジェクトマッピングライブラリ
.NETとRedisをつなぐ流れるようなAPIとオブジェクトモデル
Redisは、その速度とシンプルさから何百万人もの開発者に愛されている優れたテクノロジーです。Redisは、プログラマーがすでに知っているデータ構造に沿って直感的に整理されたネイティブインターフェースを提供しており、それらの構造は使いやすく、驚くほど最適化されています。今回登場した新しい.NET用クライアントライブラリ「Redis OM」は、まさにこの「速度」と「シンプルさ」の融合を目指したものです。
Redis OM .NETとは?
Redis OMは、Redisのためのオブジェクトマッピングライブラリであり、それ以上の機能も備えています。その開発動機は、「開発者がすべてのRedisコマンドを学ばなくても、いかにRedisの恩恵を最大限に受けられるか?」という問いに答えることにあります。この最初のプレビューリリースでは、「ドメインオブジェクトをRedisにどう保存し、どう検索するか?」という課題に焦点を当てています。Redis OM .NETのプレビュー版は、オブジェクトマッパー、セカンダリインデックスビルダー、そしてシンプルかつ強力なクエリビルダーを兼ね備えており、これらすべてがRedisでのドメインオブジェクトの保存と検索を支援するために設計されています。
Redisモジュールとの連携
モジュールAPIは、Redisにとってゲームチェンジャーとなりました。モジュールはプラットフォームに大きな柔軟性をもたらすと同時に、Redisに不可欠な機能を提供します。特にRedisJSONは、セカンダリインデックスやドキュメントモデリングの分野で、膨大な可能性への扉を開きます。Redis OMはコアのRedisでも十分に動作しますが、RedisJSONを組み合わせることで真価を発揮します。RedisJSONを最大限に活用することで、Redis上でオブジェクトをモデル化し、クエリするための豊かで強力なAPIを実現しています。
主な機能
Redis OM .NETのプレビュー版には、次の4つの主要な機能があります。
- オブジェクトモデリング
- インデックス作成
- 流れるような(Fluent)クエリ
- 流れるような(Fluent)集計
仕組み
Redis OMを使い始めるには、まずプロジェクトにパッケージをインストールします。以下のコマンドを実行するだけです。
dotnet add package Redis.OM
Redis OMライブラリの中心的な接続ロジックはRedisConnectionProviderに存在します。このプロバイダーは、Redisと通信するための3つの異なるオブジェクトへのアクセスを提供します。
IRedisConnection:ExecuteおよびExecuteAsyncメソッドを使って、Redisと直接やり取りできます。RedisCollection<T>:ジェネリック型のオブジェクトコレクションです。このインターフェースがFluentクエリAPIを提供します。RedisAggregationSet<T>:Fluent APIを使って、Redisで集計パイプラインを構築・実行できます。
Redisへの接続
ASP.NET CoreでRedis OMをRedisに接続するには、RedisConnectionProviderのインスタンスをシングルトンとして依存性注入します。その際にはRedis URIを使用します。.NET 6の場合は、Program.csファイルを開いて以下のように記述します。
using Redis.OM;
var provider = new RedisConnectionProvider("redis://localhost:6379");
builder.Services.AddSingleton(provider);
Startup.csファイルを使用する.NET 5の場合は、Startup.ConfigureServicesに以下を追加します。
services.AddSingleton(
new RedisConnectionProvider("redis://localhost:6379"));
オブジェクトのモデリングと検索
RedisJSONを使用すると、JSONオブジェクトをRedisにネイティブに保存し、それらをクエリできます。ただし、JSONをクエリするには、まずインデックスを定義する必要があります。この作業を簡単にするため、Redis OM .NETでは宣言的なモデルを導入し、宣言的なインターフェースを通じてインデックスを定義できるようにしました。
Redisに保存してプロパティをインデックス化したいクラスを宣言するには、クラスにDocument属性を付け、個々のプロパティにIndexedまたはSearchable属性を付与します。Indexedは標準的なインデックスを意味し、Searchableは文字列プロパティのみに適用され、そのプロパティが全文検索でクエリ可能になることを示します。次に、装飾した型をIRedisConnection.CreateIndexメソッドに渡せば、Redisにインデックスが作成されます。
たとえば、インデックス付きのCustomerクラスを宣言する場合は、次のようになります。
[Document(StorageType = StorageType.Json)]
public class Customer
{
[RedisIdField]
public string Id { get; set; }
[Indexed]
public string FirstName { get; set; }
[Indexed]
public string LastName { get; set; }
[Searchable]
public string Email { get; set; }
[Indexed(Sortable = true)]
public int Age { get; set; }
}
await connection.CreateIndexAsync(typeof(Customer));
クエリ
インデックスを作成すれば、RedisCollection<T>を使ってRedis内のオブジェクトをクエリできるようになります。たとえば、Johnという顧客がRedisにCustomerオブジェクトとして保存されている場合、次のように検索できます。
var customers = provider.RedisCollection<Customer>();
var john = customers.FirstOrDefault(x => x.FirstName == "John");
範囲クエリも簡単に行えます。たとえば、まだ退職年齢に達していないすべての顧客を検索してみましょう。
var workingCustomers = customers.Where(x => x.Age <= 65);
RedisCollectionとRedisJSONを組み合わせれば、普段LINQで書くのと同じ感覚でリッチで複雑なクエリを構築でき、Redis OMがRedisのクエリ言語への変換を自動的に処理してくれます。
集計
クエリに加えて、Redis Aggregationsを使えば、さまざまな処理を行う集計パイプラインを構築できます。たとえば、各顧客の3年後の年齢を求めたい場合は、Apply式の中で単純な算術演算を書くだけで、Redisで正しくフォーマットされた集計パイプラインへと変換されます。
var futureAges = provider.AggregationSet<Customer>()
.Apply(x => x.Age + 3, "FutureAge");
また、レコードをグループ化して統計情報を計算することもできます。たとえば、顧客を姓ごとにグループ化して平均年齢を求めるには、次のようにします。
var averageAges = provider.AggregationSet<Customer>()
.GroupBy(x => x.LastName)
.Average(x => x.Age);
まとめ
以上が、Redis OM for .NETの機能のごく簡単な概要です。さらに詳しく知りたい方は、チュートリアルやAPIドキュメントをご覧ください。今後もRedis.OMには新機能を追加していく予定であり、そのためにコミュニティからのフィードバックを心待ちにしています。ぜひ実際に試してみてください。問題を発見したり、ライブラリに追加してほしい機能のアイデアが浮かんだりしたら、GitHubでissueを立ててください。もちろん、コミュニティからの貢献もいつでも歓迎しています。プルリクエストもお待ちしています :)
-
Redisのパフォーマンスを考える:「遅くしない」という発想が鍵
シンプルなキャッシュ用途からテラバイト級の大規模構成まで、さまざまなユースケースでRedisを活用する多くの方々や企業と対話する機会に恵まれています。その中で、最もよく質問されるトピックが「パフォーマンス」です。Redisのパフォーマンスへの向き合い方は、他のシステムとは大きく異なります。多くのデータベースサーバーでは「パフォーマンスを向上させる」ことを目指しますが、Redisの場合、目標は「遅くしないこと」です。これは根本的に異なるアプローチであり、それを活かすには別のマインドセットが必要です。パフォーマンス指標――レイテンシこそが王様Redisを運用するうえで主に関心を寄せるべきパフォーマ
-
Fastly ComputeでUpstash Redisを活用する方法
この記事では古いバージョンのFastly CLIを使用しています。最新の手順については、こちらの記事をご確認ください。 この記事では、Fastly Compute@Edge上で動作するシンプルなアプリケーションを作成します。このアプリケーションはUpstash Redisにアクセスし、ページビュー数を記録します。 モチベーション エッジコンピューティングは、近年最も注目されているトレンドのひとつです。CloudflareやFastlyといったCDNサービスは、ユーザーが自社のエッジインフラストラクチャ上でアプリケーションを実行できるようにしました。これにより、開発者はグローバルに分散した高