4

使用 nodejs、socket.io 和 redis 事务。
想知道这段代码会发生什么(虚拟代码)

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

...  

socket.on('setSomeKey', function() {  
    client.watch('someKey');
    client.get('someKey',function(err,replies) {  
        client.multi().set('someKey','someValue').exec();
    });
});

socket.on('setSomeStuff', function() {
    client.watch('someStuff');
    client.set('someStuff','blip');
    ...
});

客户端 1 发送事件 'setSomeKey':
-> redis watch someKey
-> redis get someKey 并等待回复

客户端 2 发送事件 'setSomeStuff'
-> redis watch someStuff
-> redis set someStuff & 等待回复

客户端 1:-> 接收 'someKey' 并尝试 multi..exec:
=> 由 client2 设置的 'someStuff' 上的监视会影响 multi exec 吗?

换句话说,在使用 MONITOR 观看 redis 时是否会发生这种情况:
- watch someKey
- get someKey
- watch someStuff
- set someStuff
- multi
- exec => FAIL 因为“watch someStuff”在 get 和 multi..exec 之间执行了变化回调?

4

0 回答 0