使用 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 之间执行了变化回调?