2015-01-04 40 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