0

我需要检查 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();
4

1 回答 1

0

Watch 总是返回 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();
于 2013-05-16T15:52:22.780 回答