避免雷迪斯竞争条件

时间:2014-12-02 07:52:07

标签: node.js redis message-queue

我正在尝试弄清楚当我更新redis时如何避免竞争条件。这是我的场景:由于查询参数长度限制,我有一条消息被分解为几个http GET请求。我使用redis来存储临时消息块,当我拥有所有块时,我将它们连接起来并将它们存储在DB中。块被标记有消息id,并且我将块存储在'$'分隔的字符串中,由消息id键入。当我得到一个新块时,我得到块字符串,然后附加新块+'$',并将其设置为redis。问题是我担心如果我调用set,并且set命令在下一次get之前还没有完成执行,我将不会有最新的chunk字符串。如果我有一个redis客户端,也许这可以缓解这个问题,因为可能是命令是按服务器上接收的顺序执行的?任何洞察力都得到了赞赏,包括如何以更加理智的方式构建消息重新组装的建议?谢谢。

1 个答案:

答案 0 :(得分:3)

这里最简单的方法是使用Redis'APPEND命令 - 这将为您节省GET值的往返,并确保操作的原子性。