Node.js - 使用 Redis 原子更新进行扩展
Node.js - Scaling with Redis atomic updates
我有一个 Node.js 应用可以执行以下操作:
- 从 Redis 获取数据
- 预制数据计算
- 将新结果写回 Redis
这个过程每秒可能发生几次。我现在面临的问题是我希望运行此过程的多个实例,并且由于每个节点更新后另一个节点获得了最后一个值,我显然看到更新了过时的日期。
如何使上述过程原子化?
我无法将操作添加到 Redis 中的事务,因为我需要在处理和更新之前获取数据(这会强制提交)。
谁能指点一下?
Redis 支持原子事务http://redis.io/topics/transactions
对于问题不够清晰,我们深表歉意。
进一步阅读后,我确实可以使用事务,但我一直难以理解的地方是我需要将读取与更新分开,并将更新包装在事务中,同时在读取时使用 WATCH。如果发生另一个更新,这将导致更新事务失败。
所以工作流程是:
WATCH key
GET key
MULTI
SET key
EXEC
希望这对寻求原子获取和更新的其他人有用。
我有一个 Node.js 应用可以执行以下操作:
- 从 Redis 获取数据
- 预制数据计算
- 将新结果写回 Redis
这个过程每秒可能发生几次。我现在面临的问题是我希望运行此过程的多个实例,并且由于每个节点更新后另一个节点获得了最后一个值,我显然看到更新了过时的日期。
如何使上述过程原子化?
我无法将操作添加到 Redis 中的事务,因为我需要在处理和更新之前获取数据(这会强制提交)。
谁能指点一下?
Redis 支持原子事务http://redis.io/topics/transactions
对于问题不够清晰,我们深表歉意。
进一步阅读后,我确实可以使用事务,但我一直难以理解的地方是我需要将读取与更新分开,并将更新包装在事务中,同时在读取时使用 WATCH。如果发生另一个更新,这将导致更新事务失败。
所以工作流程是:
WATCH key
GET key
MULTI
SET key
EXEC
希望这对寻求原子获取和更新的其他人有用。