2

最初に、私がやりたいことではない.rdbファイルのクエリについて質問しました。アクティブなサーバーにクエリを実行します。

RDBスナップショットを使用して、pub/subシナリオでRedisを使用するプロジェクトを開始しようとしています。

.Net WCFクライアントは、 Marc Gravellの BookSleeveを介してRedis接続を構成し、着信要求を受け入れます。

RDBスナップショットを有効にすると、インクリメンタルスナップショットが作成されます。

クライアントが特定のチャネルと日付範囲に基づいてデータセットを取得できるようにしたい。読み取りと書き込みの両方に同じWCFクライアントを使用することを考えていました(特に異論がない限り)。サーバーにクエリを実行して日付範囲、チャネル固有のデータを取得し、それをWCFクライアント経由で配信するために使用する方法が完全にはわかりません。

BookSleeveを介してこのデータクエリ機能を実現できますか(もしそうなら、どのように)、またはServiceStack.Redisなど、使用するのに適した他のアクセスラッパーがありますか?

書き込みにはBookSleeveを使用し、クライアントとしてServiceStack.Redisを使用する方がよいでしょうか。

- アップデート -

スナップショットをデフォルトに設定しています:

save 900 1
save 300 10
save 60 

Redis Admin UIでデータを閲覧すると、15分(900秒)後にキーに保存されているデータが表示されると思いますが、キーを検索するとチャネル名(およびその他のキー)が表示されますが、値は表示されません。

pub / subイベントは永続化されないため、チャネルデータをキャプチャして保存するための良い方法は何ですか?

4

1 に答える 1

1

OPの編集に対処するために編集します。

前述のように、pub/subは永続化されません。キューを使用することをお勧めします; redisの「list」タイプはそのために理想的であり、、、、、、およびlpushすべてrpushがそのシナリオの主要なコマンドです。pub / subを使用して、新しいデータが利用可能であることをクライアントに通知することもできます。または、ブロッキングポップコマンド、、、を使用することもできます。これらの操作はすべてここで定義されています。lpoprpoprpoplpushltrimblpopbrpopbrpoplpush


明確にできますか:rdbファイルがたくさんあり、任意のファイル(「インクリメンタルスナップショット」)から読み取りたいようです。そうですか?

rdbファイル自体は、専用のツールを使用して解析しない限り、あまり役に立ちません。Redisクライアント(BookSleeveやServiceStackなど)は、実行中のRedisインスタンスと通信することを期待しています。SomeTableあなたの質問は、「ある範囲の日付のsql-server .bakファイルがあります。どうすればデータを取得できますか?」のように聞こえます。-答えは「最初にbakをSQLServerにロードする」です。

redis-serverの起動は非常に簡単ですが、複数のrdbファイルから読み取ることは想定されていません。

オプション:

  1. rdbを手動で解析します。このスレッドを参照してください-痛みを期待してください
  2. 必要に応じてファイルごとにredis-serverインスタンスをオンザフライで開始します...まあ、それは機能しますが、プロセス管理は「楽しく」なる可能性があります
  3. 事前にファイルごとにredis-serverインスタンスを開始します...次に、ポートの管理/マッピング、および新しいファイルの監視について心配する必要があります
  4. DEBUG RELOAD;を使用したホットロード ただし、これは実際にはあまりサポートされておらず、テストでは適切に動作させることができませんでした(特に、SAVEリロード前に実行されるようで、このシナリオには不適切です)

しかし、最終的には、オンザフライから選択したいさまざまなrdbファイルを用意することは、Redisの通常のユースケースではありません。

要件を理解していれば、これはクライアントの問題ではなく、プラットフォーム固有の問題(.NET、C#、WCFなど)は言うまでもありません。まず、サーバーをどのように実行するかを理解する必要があります。 (s)またはファイルを読み取ります。それはRedisDBで最もよく尋ねられます

于 2013-01-22T10:40:29.400 に答える