使用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看一些关键
- > redis得到someKey并等待回复
客户端2发送事件' setSomeStuff'
- > redis看一些东西
- > redis设置了someStuff&等待回复
客户1:
- >收到某些关键词'并尝试multi..exec:
=>将手表放在一些东西上吗? client2设置影响多个exec?
换句话说,用MONITOR观看redis时会发生这种情况:
- 看一些关键
- 得到一些关键
- 看一些东西
- 设置someStuff
- 多
- exec =>失败,因为"看一些东西"哪个在回调中执行get和multi..exec之间有变化?