Redis multi / exec与一个事件驱动程序

时间:2011-05-01 12:47:31

标签: ruby redis eventmachine

如何在MULTI(使用EventMachine的Ruby驱动程序)的事件Redis驱动程序中使用EXEC / WATCH(和em-hiredis)?如果我跑:

redis.multi do
  redis.sadd("foo", "bar") do
    redis.inc("baz", "qux") do
      redis.exec do
        puts 'yay!'
      end
    end
  end
end

应用程序的某些其他部分有可能设法在EXEC之前潜入操作,如果有很多事情发生(例如,想象一下,我有一个计时器,每个都增加一些键第二,并且上面的代码运行时间超过一秒,然后一些增量命令将作为MULTI / EXEC的一部分发送 - 如果我想中止事务怎么办?那么碰巧成为其中一部分的任何增量都将消失。很容易出现更糟糕的情况。)

我想我可以实现某种锁定,以便在MULTI / EXEC正在进行时无法执行其他操作,但这不是一个很好的解决方案,有任何人否则找到了更好的方法?

1 个答案:

答案 0 :(得分:0)

正如@balu在对问题的评论中所述,没有多重联系就无法做到。