检查redis变量是否在nodejs中外部更改

时间:2013-04-18 23:03:24

标签: node.js redis

我需要检查redis值是否已被其他进程更改,如果已更改则返回其值,如果没有,则返回false。

我相信手表功能可能是为此设计的,但是我很难理解如何实现它,因为无论变量是否被更改,手表总是返回OK。

这是我现在所拥有的,但即使没有改变,这也总是返回变量。

function changed(){
    client.watch("tally", function (err,reply) {
        if(reply=="OK") client.get("tally", function(err, reply) { console.log(reply);});
        else console.log('nochange');
    });
    var x = setTimeout(function(){ changed(); },1000);  
}

changed();

1 个答案:

答案 0 :(得分:0)

观看总是返回OK;请参阅http://redis.io/commands/watch - 它仅与MULTI / EXEC(交易)结合使用,以检查EXEC返回值。

您可以监视/轮询Redis键值,如下所示:

var redis = require('redis');
var client = redis.createClient();

var keytracker;
function changed() {

    client.get("tally", function(err, reply) {
        if (err)
            console.log('A Problem with Redis: ' + err);

        if (reply == keytracker) {
            console.log('nochange');
        } else {
            keytracker = reply;
            console.log(reply);
        }
    });

    setTimeout(function() { changed(); }, 1000);
}

changed();