node.js - 避免 redis 竞争条件

标签 node.js redis message-queue

我想弄清楚如何在更新 Redis 时避免竞争条件。这是我的场景:由于查询参数长度限制,我有一条消息被分解成几个 http GET 请求。我正在使用 redis 来存储临时消息 block ,当我拥有所有 block 时,我将它们连接起来并将它们存储在数据库中。这些 block 标有消息 ID,我将这些 block 存储在一个“$”分隔的字符串中,以消息 ID 为键。我在获取新 block 时获取 block 字符串,然后附加新 block +'$',并将其设置回redis。问题是我担心如果我调用 set,而 set 命令在我下一次获取之前还没有完成执行,我将不会有最新的 block 字符串。如果我只有一个 redis 客户端,也许这会缓解这个问题,因为这些命令可能是按照服务器接收到的顺序执行的?任何见解表示赞赏,包括有关如何以更理智的方式构建消息重组的建议?谢谢你。

最佳答案

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

关于node.js - 避免 redis 竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27244347/

相关文章:

node.js - 使用nodejs读取Windows事件日志

linux - Linux VM 上的 Redis BGSAVE

node.js - 您可以在 RESTFUL 环境中使用 NodeJs Passport Session 吗?

node.js - 我越来越无法读取未定义的属性 'query'

javascript - SEQUELIZE 插入行时不会自动递增 id?

map - 使用 Redis 服务 URL 映射到 nginx

redis - 重启后重新连接到 Redis

node.js - Redis 队列 : call BLPOP/BRPOP inside a loop?

c# - MQRC_KEY_REPOSITORY_ERROR

php - 排队 mysql 查询的最佳方法是什么?在速度方面