2015-01-04 41 views
0

我有一个Node.js的应用标定瓶坯如下:的Node.js - 与Redis的原子更新

  • 从Redis的获取数据上的数据
  • 预制棒计算
  • 写入新的结果传回的Redis

该过程可能每秒发生几次。我现在面临的问题是我希望运行该进程的多个实例,并且显然看到由于每个节点在另一个获得最后一个值之后进行更新而更新日期被更新。

我怎么会做出上述过程原子?

我无法将操作添加到Redis中的事务中,因为我需要在处理和更新之前获取数据(这将强制进行提交)。

任何人都可以建议吗?

+0

这或许SO线程是有关您的情况:http://stackoverflow.com/questions/15776955/redis-watch-multi-exec-by-one-client如果没有,请重新改写以更清晰的方式的问题。 –

回答

1

道歉缺乏明确的与问题。

经过进一步阅读,确实我可以使用事务处理,但是我很难理解的区域是我需要从更新中分离出读取内容,并将更新与使用WATCH一起包装在事务中。这会导致更新事务失败,如果发生了另一个更新。

所以工作流程是:

WATCH key 
GET key 
MULTI 
SET key 
EXEC 

希望这是任何人都希望一个原子获得和更新有用的。

0

Redis的支持原子事务http://redis.io/topics/transactions

+0

感谢您的答复,但除非即时失去了一些东西,我打我的问题,即当我这样做的get描述的问题,我不得不承诺真正得到的结果。这使我处于相同的情况,即另一个进程可以选择数据。 – Ben

+0

啊,也许我误解了。你能提供一个更具体的例子说明你正在尝试做什么?很难想象这会让你处在一个粗略的位置 – jtmarmon