1

protobuf-net と組み合わせたブックスリーブの使用に関して、かなり基本的な質問がいくつかあります。接続を管理するシングルトン クラスを実装したので、同じ接続を何度も再利用しています。ここで、コンボの実際の使用に関するいくつかの質問があります。

  1. "db" int と "key" 文字列の違い/重要性は何ですか?
  2. protobuf-net を使用して一連のオブジェクトを SortedSet/List にシリアル化するにはどうすればよいですか?
  3. protobuf-net を使用して、SortedSet/List から一連のオブジェクトを逆シリアル化するにはどうすればよいですか?

検索には Range() メソッドを使用する必要があると考えていました。

    public IList<T> RetrieveAllAsList()
    {
        var conn = RedisConnectionManager.Current.GetConnection();
        conn.Open();


        int length = (int)conn.Lists.GetLength(10, "idk").Result;
        byte[][] data = conn.Lists.Range(10, "idk", 0, length-1).Result;

        List<T> output = new List<T>();
        for (int i = 0; i < data.Length; i++)
        {
            using (MemoryStream ms = new MemoryStream(data[i]))
            {
                output.Add(Serializer.Deserialize<T>(ms));
            }
        }

        conn.Close(false);
        return output;
    }

この件で何か助けていただければ幸いです。ありがとうございました。

4

2 に答える 2

2

"db" int と "key" 文字列の違い/重要性は何ですか?

Redis を使用すると、データを複数のデータベースに分割できます。たとえば、stackexchange Web サイトでは、stackoverflow.com 関連のものを db=0 に格納し、programmers.se.com 関連のものを db = 1 に格納できます。

各データベース内には、キー = 値のペアがあります。キーは常に文字列です。値は、文字列、リスト、セット、ソート済みセット、またはマップの 5 つのデータ型のいずれかです。

従来の Redis クライアントでは、データベース番号を提供する必要はありません。指定しない場合は、db=0 と見なされます。ただし、Booksleeve では、データベース番号を提供する必要があります。気にしない場合は、すべての API 呼び出しに 0 を渡してください。

ただし、文字列キーは一意である必要があり、完全にアプリケーション固有です。たとえば、ユーザー オブジェクトを保存する場合、通常は のようなキーを持ちuser:1190099、値は次のようなキー=値のペアを持つマップとして使用します。{"name":"singlelabs", "id":1190099 ... }

protobuf-net を使用して一連のオブジェクトを SortedSet/List にシリアル化するにはどうすればよいですか? protobuf-net を使用して、SortedSet/List から一連のオブジェクトを逆シリアル化するにはどうすればよいですか?

まず、プロトコル バッファを使用するかどうかを決定する必要があります。

Protocol Buffers は、複雑なオブジェクトをバイナリ blob にシリアライズ/デシリアライズできます。このブロブは Redis に対して不透明です。つまり、このバイナリ blob を設定または取得できますが、他の Redis 機能は使用できません。

本当に Redis のリストとソート済みセットを使用したい場合は、BookSleeve が提供する API を使用する必要があります。私は Booksleeve を使用していませんが、次の 2 つのインターフェイスは、データをリスト / ソートセットに挿入する方法を説明するはずです。

http://code.google.com/p/booksleeve/source/browse/BookSleeve/ISortedSetCommands.cs

http://code.google.com/p/booksleeve/source/browse/BookSleeve/IListCommands.cs

于 2012-04-16T20:58:04.733 に答える
1

Sripathiは、DBキーが何であるかを説明するのにすでに良い仕事をしました。必要な理由は、BookSleeveがマルチプレクサとして機能するためです。したがって、DBを使用している場合、異なる呼び出し元が異なるデータベースを使用している場合の競合状態を回避するために、DBを渡す必要があります。複数のデータベースを使用していない場合は、0を渡すだけです。

再シリアル化/逆シリアル化-これは意図的に個別に行われるため、呼び出し元は適切なシリアル化を使用できます-したがって、BookSleeveは文字列とBLOBについてのみ認識します。ただし、シリアル化コードは問題ないようです。

私が持っている唯一の批判は、最初に長さを取得する必要がないということです。インテリセンスは使用法を説明する必要があります。-1またはint.MaxValueを渡すと、最初に長さを取得しなくてもすべてのアイテムが一覧表示されます(あいまいなことをお詫びしますが、出発ラウンジにいます)。これにより、ネットワークトリップが回避されます。

于 2012-04-17T06:55:13.640 に答える