我使用WATCH/MULTI/EXEC命令序列来完成Rails应用程序中的事务。我想说明当事务成功和事务失败时应用程序的行为(特别是当观察的密钥在事务期间在另一个会话中修改时)。
具体地说,给出(人为的)例子下面,我怎么可能写一个规范,总是修改testval
在Redis,而任意计算正在执行?
def test_watch
REDIS.watch("testval") do
val = REDIS.get('testval')
val += 1000 # arbitrary computation
REDIS.multi do |m|
REDIS.set('testval', val)
end
end
end
您实际上不需要在另一个会话中修改键'testval',您可以在同一个会话中这样做,您的事务仍然会失败。所以你只需要找到一种方法来注入一个REDIS。如果在watch和multi之间设置('testval', some_value),则事务将失败。