2012-01-09 13 views
1

redis内にキー/値ペアのリストを含めることは可能ですか?または場合によっては一組のキー値ペアを含む。私が持っていると思いますどのようなredis内のキー値ペアのリスト

は、次のようにカウンターを持っている日付タイムスタンプのリストです:

1.1.12 -> 12 
1.2.12 -> 1 
1.3.12 -> 3 

私は次のように範囲を取得使用することができるようにしたい:

は範囲1.1.12を取得します1.2.12にして、結果を13にしたい。

これは可能ですか?

私はどの構造を使用しますか?

これを行う正しい方法は何ですか?

iの集合としてタイムスタンプを持つようにしたいと言うと、以下のように各タイムスタンプは3-4キーと値のペアを指すことになることができます:

1.1.12 -> error : 1 
      pass : 100 
1.2.12 -> error : 3 
      pass : 50 
1.3.12 -> error : 12 
      pass : 100 

C#のクライアントはこれをサポートしていますか?

私の主な目標は、この多値構造を保存して照会できることです。

答えて

0

私は、日付/時刻文字列を「時代からの秒数」のようなものに変換することを提案しています(しかし、1970年から2038年までのより広い範囲が必要な場合はおそらく64ビット値を使用します。あなたのアプリケーションの要件に応じて、出発点。

そこから、私はzset(ZRANGEとZRANGEBY Redis操作/コマンドを使用してサブセットをフェッチすることをサポートする "ソート済み"または "採点済み"セット)を使用します。 JSONまたはBSONエンコードされたディクショナリ/ハッシュテーブルを含む、エンコードされた値の任意の並べ替えがスコアになることができます。または、Redisキーとして使用する単純な文字列でもかまいません(つまり、間接指定の1つのレイヤー、つまりRedisキーのインデックスとして機能するzsetを実装します)。この後者のアプローチを選択した場合は、キーに一意のシーケンスIDを提供するためにRedisに格納された整数を使用することをお勧めします。これらの間接キー/値を作成する同時プロセス/ノードの可能な面にACIDプロパティペア)。

+0

これは問題ありませんが、カウンタを使用することもできます。私はzrangeを見ていましたが、sortedsetは増分操作をサポートしていますか? – DarthVader

+0

一般に、Redisは、そのセット、セット、またはハッシュに含まれる値に対して、さまざまな操作/コマンドをサポートしていません。つまり、zset内のあるスコアまたは項目でINCRを使用することはできません(zsetからアイテムを削除する操作を1回実行する必要があります。作成したスコア/値のペアのみを追加する必要があります)。 HINCRBY操作がありますが、それ以外の場合は、「ロック」フィールドでHSETNXを使用する必要があります...操作を実行してから、HDELでロックしてください。そのようなロックの値は、おそらく古いロック検出を容易にします。 –

+0

それはあまりにも多くのことをするにはあまりにも?簡単な方法があれば私は好奇心を持っていました。おそらく組み込みの機能です。 – DarthVader

関連する問題