2012-02-28 29 views
9

私はredisデータストアから特定のキーをポーリングするプログラムを持っており、その値が特定の条件を満たすとき何かをします。redisデータストアの "トリガ"を実装する方法は?

しかし、私は定期的にredisのポーリングが非常に非効率的だと思う、私はredisのための "トリガ"メカニズムがある場合、値が変化し、条件を満たすと、トリガーが呼び出されますか?トリガーは、RPC関数またはHTTPメッセージなどのポーリングと割り込みの違いと同じように、これ以上ポーリングする必要はありません。

これは可能ですか?

答えて

13

RedisのPub/Sub機能を使用できます。それはあなたの状況を説明した通りにあなたが必要とするものです。

本質的に、あなたはSUBSCRIBEを "チャンネル"に、アプリケーションの他の部分はそのチャンネルに変更された値を(PUBLISH)書きます。あなたの加入者(消費者、変更を知りたいクライアント)は実質的にリアルタイムで通知を受けるでしょう。

+1

ご回答ありがとうございます。 RedisのPub/Sub機能のドキュメントを読んだことがありますが、値が変わったときにどのようにトリガーするかはまだ分かりません。 「パブ」アクションは誰が行いますか?値をポーリングせずに、「Pub」アクションをトリガーする方法は? – ciphor

+0

値を書き込んでいるクライアントは、値が変更されたことを公開する必要があります。 –

+0

@ciphor私があなたの質問を理解しているなら、アイデアはあなたのアプリケーションのロジックを変更することです。あなたの値を "普通の"レディスキーに書き込む代わりに(または加えて)チャンネルに書き込むことで、もちろん可能性があります)はすぐに通知されます。 –

0

Pub/Subを使用できる場合は、これが最適です。なんらかの理由でそれが機能しない場合は、(パフォーマンスに影響を与える)MONITORコマンドを使用して、サーバーが受信するすべてのコマンドを送信することもできます。それはおそらく良い考えではありません。

特にリストの場合は、BLPOPがあります。これにより、新しいアイテムがリストからポップするまで接続がブロックされます。

関連する問題