sql >> データベース >  >> NoSQL >> Redis

これは、ServiceStack REST APIでのRedisの良いユースケースですか?

    NoSQLRedisアプリケーションを設計する際の考慮事項

    1)Redisで正しく開発するには、RDBMS向けのリレーショナルモデルではなく、C#プログラムで、つまりC#コレクションクラスとの関係をどのように構築するかについてもっと考える必要があります。より良い考え方は、RDBMSテーブルではなく、ドキュメントデータベースのようなデータストレージについて考えることです。基本的に、すべてがキー(インデックス)を介してRedisでブロブされるため、プライマリエンティティ(つまり、集約ルート)が何であるかを理解する必要があります。これは、独自の「キー名前空間」に保持されるのか、それとも非プライマリエンティティであるのか、つまり単純です。親エンティティで永続化する必要があるメタデータ。

    プライマリデータストアとしてのRedisの例

    これは、Redisを使用して簡単なブログアプリケーションを作成するための優れた記事です。

    http://www.servicestack.net/docs/redis-client/designing-nosql-database

    Redisを使用した別の実際の例については、RedisStackOverflowのソースコードを確認することもできます。

    基本的に、各タイプのアイテムを個別に保存およびフェッチする必要があります。

    var redisUsers = redis.As<User>();
    var user = redisUsers.GetById(1);
    var userIsWatching = redisUsers.GetRelatedEntities<Watching>(user.Id);
    

    エンティティ間の関係を保存する方法は、Redisのセットを利用することです。たとえば、ユーザーとウォッチャーの関係を概念的に保存するには、次のようにします。

    SET["ids:User>Watcher:{UserId}"] = [{watcherId1},{watcherId2},...]
    

    Redisはスキーマレスでべき等です

    IDをRedisセットに格納することはべき等です。つまり、 watcherId1を追加できます。 同じセットに複数回送信すると、1回だけ発生します。これは、関係の存在を確認する必要がなく、関連するIDをこれまで存在しなかったように自由に追加し続けることができるため便利です。

    関連:存在しないRedisコレクション(リストなど)への書き込みまたは読み取りは、空のコレクションへの書き込みと同じです。つまり、リストにアイテムを追加するときに、リストにアイテムを追加すると、リストが作成されます。既存のリストは単に0の結果を返します。スキーマを使用するために事前にスキーマを定義する必要がないため、これは摩擦のない生産性の向上です。ただし、Redisは、キーが存在するかどうかを判断するためのEXISTS操作、またはそのタイプを判断できるようにするTYPE操作を提供します。

    書き込みに関係/インデックスを作成する

    覚えておくべきことの1つは、Redisには暗黙のインデックスがないため、通常、書き込み中に自分自身を読み取るために必要なインデックス/関係を設定する必要があるということです。基本的に、すべてのクエリ要件を事前に検討し、書き込み時に必要な関係を設定する必要があります。上記のRedisStackOverflowソースコードは、これを示す良い例です。

    注:ServiceStack.Redis C#プロバイダーは、 Idという一意のフィールドがあることを前提としています。 それが主キーです。 ModelConfig.Id()を使用して、別のフィールドを使用するように構成できます。 構成マッピング。

    Redisの永続性

    2)Redisは、すぐに使用できるRDBとAppend Only File(AOF)の2種類の永続モードをサポートしています。 RDBはルーチンのスナップショットを書き込みますが、Append Only Fileは、スナップショット間のすべての変更を記録するトランザクションジャーナルのように機能します。それぞれの機能とアプリケーションのニーズに慣れるまで、両方を追加することをお勧めします。すべてのRedis永続性はhttp://redis.io/topics/persistenceで読むことができます。

    注Redisは、http://redis.io/topics/replication

    で詳細を読むことができる簡単なレプリケーションもサポートしています。

    RedisはRAMが大好きです

    3)Redisは主にメモリ内で動作するため、最も重要なリソースは、データセット全体をメモリに保持するのに十分なRAMと、ディスクにスナップショットを作成するときのバッファがあることです。 Redisは非常に効率的であるため、小さなAWSインスタンスでも多くの負荷を処理できます。探したいのは、十分なRAMがあることです。

    Redis管理UIを使用したデータの視覚化

    最後に、ServiceStack C#Redisクライアントを使用している場合は、エンティティの見栄えの良い視覚的なビューを提供するRedis管理UIをインストールすることをお勧めします。 http://servicestack.net/RedisAdminUI/AjaxClient/

    でライブデモを見ることができます。


    1. Microsoft.Extensions.Cashing.RedisとMicrosoft.Extensions.Caching.StackExchangeRedis.RedisCacheの違い

    2. WiredTigerとインプレースアップデート

    3. Javaを使用したRedis(キャッシュ)の単一の値を指す複数のキー

    4. 2dジオインデックスを使用してMongooseスキーマの配列でオブジェクトを正しく定義する方法