2014-12-02 106 views
1

我想弄清楚在更新redis時如何避免競爭條件。這是我的場景:由於查詢參數長度限制,我有一條消息被分解爲多個http GET請求。我使用redis來存儲臨時消息塊,當我擁有所有的塊時,我將它們連接起來並將它們存儲在數據庫中。這些塊用一個消息ID進行標記,並將塊存儲在由消息ID鍵入的'$'分隔字符串中。當我得到一個新塊時,我得到了塊字符串,然後添加新的塊+'$',並將其設置回redis中。問題是我擔心如果我打電話給set,並且set命令在我下一次獲得之前還沒有完成執行,我將不會有最新的塊字符串。如果我有一個單一的redis客戶端,也許這將緩解這個問題,因爲大概這些命令是按照服務器上接收到的順序執行的?任何見解都會受到讚賞,包括如何以更理智的方式構建消息重新組裝的建議?謝謝。避免redis競爭條件

回答

3

這裏最簡單的事情就是使用Redis的'APPEND命令 - 這將節省您GET值的往返行程並確保操作的原子性。

+0

美麗!是的,那會起作用。謝謝。 – worker1138 2014-12-02 08:15:48