sql >> データベース >  >> NoSQL >> Redis

キースペースイベントを再起動しません-起動しません

    サブスクライバークライアントを特定のチャネルにサブスクライブするのを忘れました。さらに、すべてのイベントを監視する場合は、パターンベースのサブスクリプションを使用する必要があります。

    あなたはこのようなことをしたいかもしれません(テストされていません):

    subscriber.on("pmessage", function (pattern, channel, message) {
        console.log("("+  pattern +")" + " client received message on " + channel + ": " + message);
        switch (channel) {
            // blah blah blah
            // ...
        }
    });
    subscriber.psubscribe(''__key*__:*')
    

    詳細については、Redisのドキュメントとnode_redisの例をご覧ください。

    更新:

    これは、チャネルサブスクリプションとパターンサブスクリプションの違いを説明するための例です。簡潔にするために、適切なエラー処理は省略されています。

    var redis = require("redis");
    
    var client = redis.createClient('6379','127.0.0.1');
    var subscriber1 = redis.createClient('6379','127.0.0.1');
    var subscriber2 = redis.createClient('6379','127.0.0.1');
    
    // First subscriber listens only to events occurring for key mykey
    function S1(next) {
        subscriber1.on('message', function(channel, msg) {
            console.log( "S1: received on "+channel+" event "+msg )
        });
        subscriber1.subscribe( "[email protected]__:mykey", function (err) {
            next();
        });
    }
    
    // Second subscriber listens to events occuring for ALL keys
    function S2(next) {
        subscriber2.on('pmessage', function(pattern,channel, msg) {
            console.log( "S2: received on "+channel+" event "+msg )
        });
        subscriber2.psubscribe( "[email protected]__:*", function (err) {
            next();
        });
    }
    
    // Do something with keys mykey and anotherkey
    function do_something() {
        client.set("mykey","example", function( err ) {
            client.set("mykey", "another example", function( err ) {
                client.del("mykey", function( err ) {
                    client.set("anotherkey","example", function( err ) {
                        client.del("anotherkey");
                    });
                });
            });
        });
    }
    
    // Here we go
    S1( function () {
        S2( function () {
            do_something();
        });
    });
    

    このスクリプトの結果は次のとおりです。

    S1: received on [email protected]__:mykey event set
    S2: received on [email protected]__:mykey event set
    S2: received on [email protected]__:mykey event set
    S1: received on [email protected]__:mykey event set
    S1: received on [email protected]__:mykey event del
    S2: received on [email protected]__:mykey event del
    S2: received on [email protected]__:anotherkey event set
    S2: received on [email protected]__:anotherkey event del
    

    最初のサブスクライバーはmykeyのイベントのみを受信し、2番目のサブスクライバーはすべてのキーのイベントを受信することがわかります。




    1. delayd_jobs vs resque vsbeanstalkd?

    2. MongoDB-管理者ユーザーが許可されていません

    3. MongoDB $ atan2

    4. MongoDBの開発と運用のチェックリスト