0

私は.NET領域のredisを操作/調査しようとしています.定義されたタスクはセットとredis自体で最もよくカバーされていないという印象があります(変更する必要があるエンティティがあるため)-おそらく使用する方が良いでしょういくつかの他のアプローチ/または redis dataTypes ここ (最初のアイデアの 1 つは、(プロパティを管理するために) redis ハッシュを操作することでしたが、関連するエンティティのコレクションを取得する必要があるため、セットを試してみることにしました。この操作は一般的に最も重要なもの)。だから、私が今やったこと:

現在、エンティティの次の構成があります。

Entity:
    ID : Guid
    Name : string 500
    Status : string 1 (i, u, d)
    MaxItems : int 
    CurrentItems : int

私がやろうとしているのは、エンティティ アイテムを 2 つのコレクションで管理することです。

  1. 現在- クライアント (キャッシュ) で利用可能なエンティティ アイテム (最大 5000) のコレクション
  2. Raw - 承認が必要なエンティティ アイテムのコレクション (現在のコレクションの一意の ID の最大 10%)

これらのコレクションに対して実行する操作は次のとおりです

  1. Get All Entity items from Current collection : GetCurrent - 最も重要なタスク
  2. Raw コレクションの変更:

    2.1) 新しいエンティティを Raw に追加します (現在のコレクションの適切なカウンター/状態を変更できます) : AddRaw

    2.2) Raw の既存のエンティティを更新する (そのような ID が既に利用可能な場合) : UpdateRaw

  3. 現在のコレクションを変更する

    3.1) Raw コレクションからのすべての変更が Current に適用されます (まだ行われていない場合): SyncCurrent

    3.2) Raw コレクション エンティティを返す (増分変更)

    3.3) Raw コレクション エンティティをクリアする (コレクションはリセットされます)

アプローチ:

  1. Set タイプのコレクションを定義します (コレクションに関連するアイテムのリストを取得できるようにするため): SMEMBERS

  2. コレクションのアイテムの ID のみを含む追加のコレクション Current:Ids、Raw:Ids を作成します - 元のコレクション内のアイテムかどうかを定義します: SISMEMBER

  3. 新しいアイテムをセットに追加: SADD

  4. セット内のアイテムの変更: Get (SMEMBERS: Id をマスク要素として使用する SSCAN またはアイテムを反復処理する ( SMEMBERS )、ID を使用してエンティティを取得する)、RemoveOldFromSet : SREM、AddUpdated : SADD

問題、問題 (単体テスト中に特定): (報告されたすべての問題は、StackExchange.redis クライアントの機能ではなく、redis サーバー自体への接続に関連しているようです)

  1. 新しい StackExchange クライアントは、SMEMBERS で timeOut 例外をスローすることがあります (現在のコレクションに 500 アイテム)

  2. 項目 (750 以上のエントリ) を Current および Current:Id のセットに挿入しようとすると、StackExchange トランザクションで timeOut 例外がスローされ、現在の connectionTimeOut および SyncTimeOutrs は 5000 ミリ秒 (5 秒) に設定されます。

いくつかのテストを実行した後 (セット内の数百のアイテムで、選択したアプローチは最初は間違っていたと思います。Microsoft のキャッシュを使用して、これを再設計する必要があります)。今説明した方法で実装できないのですか?

前もって感謝します。

4

0 に答える 0