26

redis コレクションに変更が加えられたときにコールバックを実行できるようにしたいと考えています。コールバックはキーと値を入力として受け取ります。このようなことは可能ですか?

ありがとう?

4

5 に答える 5

28

更新:これを読んでいる人は誰でも-これらは古い答えであり、すべて無視してください. 必要なのは、何年も前から存在する Redis Keyspace Notifications です。https://redis.io/topics/notificationsを参照してください

于 2012-05-20T20:57:22.520 に答える
17

2 つのオプション:

  1. コマンドを使用MONITOR- Redis に到達するすべてのコマンドをトレースし、コレクションがいつ操作されているかを分析して確認できます。

  2. コレクションに書き込むコードを「所有」している場合は、他のコード (コールバック) に通知します。これにはRedis Pub/Subチャネルを使用できます。

編集Redis は、実際にはバージョン 2.8 でこの機能を実装する予定です。これに関する Antirez のブログ投稿を参照してください: Redis keyspace changes notification system

于 2012-05-20T20:56:10.173 に答える
12

sync コマンドを使用してフォロワーのように Redis サーバーに接続することもできます。Redis レプリケーションの仕組みを参照してください。簡単な紹介のために。

sync コマンドの出力には 2 つのフェーズがあります。最初のフェーズでは、サーバーはデータベースの dump.rdb ファイルを返します。ファイルが送信されると、AOF 形式でもある Redis プロトコルでコマンドの送信が開始されます。

できることの概要を次に示します。

  1. Redis サーバーに接続し、SYNCコマンドを発行します。
  2. dump.rdb ファイルを保存して解析します。初期データセットを構築します。node.js ベースのrdb パーサーが利用可能
  3. 続くコマンドを解析します。これらは Redis プロトコルであるため、既存の Redis ライブラリから開始できます。
  4. 受け取ったすべてのコマンドに対して、コールバックを呼び出します

大変な作業に思えますが、これはかなり簡単にハッキングできるはずです。そして、それは優れたオープンソース ライブラリにもなります!

EDIT : Sync v/s Monitor

  1. Monitorデバッグコマンドです。応答形式は、時間の経過とともに変化する可能性があります。Syncマスター -> スレーブ レプリケーションに使用されるため、より適切にサポートされます。
  2. Monitor読み取り専用コマンドを含むすべてのコマンドを発行します。Syncデータを変更するコマンドのみを取得します。
  3. Monitorlua スクリプト内で実行される個々のコマンドをログに記録します。Synclua スクリプト全体のみを転送するため、スクリプトを自分で解析する必要があります。これは確かに の契約を破るものですsync
  4. Monitor成功しなかったコマンドをログにSync記録し、データを変更するコマンドのみをログに記録します。たとえば、コマンドdel non-existing-keyはモニターによってログに記録されますが、同期を実行しても表示されません。
于 2012-05-21T02:48:38.400 に答える