2016-09-30 4 views
1

Redisを分散キャッシュとして使用しています。私は特定のキーだけを聞く異なるアプリケーションを持っています。例: App1 listen App1。* App2 listen App2。*など。Redis通知

そして、私のアプリケーションの通知を受信するために、次のパターンを使用して: のApp1: "キー*APP1。" App2の: "キー*APP2。"

私が送信する必要があります私はnotify-keyspace-events "AK"を使用しようとしています。なぜなら、set、del、expired、evictedのイベントについての通知だけです。もしうまくいくのであれば、 "AK"設定のredisは私が必要としない "expire"のような余分な通知を送るようになります。

だから、ドキュメントhttp://redis.io/topics/notificationsによると、私はカスタムプロパティを実装しようとしている:

は、notify-キースペース・イベント「Ksxe」をセットのみを送信するためには、期限切れと通知を追い出さ。しかし実際この場合、期限切れの通知のみを受け取ります。

質問: 1.なぜ私は設定されたイベントと退去されたイベントを受信しませんか?私は期限切れのイベントだけを受け取るのはなぜですか? 2. redisがdel通知のみを送信する方法はありますか?

私も "Ks"を試しましたが、設定されたイベントに関する通知は送信されません "AKE"文字列がすべてのイベントを意味するように、g $ lshzxeの別名。 "Kg $ lshzxe"も正しく動作しません。

答えて

1

「s」フラグを誤解していると思います。 setコマンドとは関係ありません。これは、タイプ "redis set"のキーを変更するコマンド、例えばsaddまたはRedisセットタイプの有効期限が切れるコマンドを送信するようにRedisに指示します。

したがって、あなたの例では、Redisがに設定されたキーが追放されるか、または「期限切れになる」と通知するようRedisに指示します。 "Ks"オプションはタイプのタイプのキーの通知を変更するように指示します。文字列setコマンドを使用して作成された場合は変更されません。それを英語に翻訳するには、レディスに、「タイプセットのキーが期限切れになったか退去したかを教えてください。

あなたはタイプ文字列のキーがsetコマンドを使用して作成または変更されたときに知りたい場合は、有効期限がそれに追加した、有効期限を設定すると、すぐにキーを削除、または追い出され、あなたの代わりにする必要があり"K $ xeg"を使用してください。 "g"は、それ自体がexpireコマンドの使用を捕まえるので重要であり、 '$'は文字列タイプを示します。

"g"フラグは "expire"イベントになりますが、有効期限イベントには "expired"というラベルが付けられているため、その違いを確認できます。もしあなたがキー上でTTLの作成を気にしなければ、 "g"を残すことができます。

関連する問題