【问题标题】:Redis Distributed Transaction using Lua Script使用 Lua 脚本的 Redis 分布式事务
【发布时间】:2017-04-21 22:36:32
【问题描述】:

我们正在尝试设计一个跨多个 Redis 数据库的分布式事务。是否可以使用 Lua 脚本来实现这一点?我们不想通过 2 阶段提交来实现,因为这会导致数据丢失。我们不能承受数据丢失。

示例场景:我有 3 个 Redis 数据库。我们需要更新所有 3 个。更新可以是顺序的,但我们希望只有在所有三个都成功时才能成功结束事务。如果其中任何一个失败,我们应该能够回滚所有这些。

【问题讨论】:

    标签: lua redis distributed-transactions


    【解决方案1】:

    不,仅依靠 Lua 脚本来实现 Redis 实例之间的分布式事务是不可能的,因为 Redis 不公开用于网络调用的库。但是,您可以使用 Lua 脚本作为构建分布式事务的解决方案的一部分(我使用 Lua 脚本在 Redis 服务器上实现 Paxos)。

    顺便说一句,在您的问题中,对 2 阶段提交导致数据丢失存在误解。这不可能发生。 2PC的教科书实现可能会导致系统阻塞但不会导致数据丢失的情况。但即使是阻塞也不是问题,因为 2PC 有非阻塞版本,例如 Google 的 Percolator 论文中的那个。

    我创建了a visualization of non-blocking 2PC。它可以帮助您了解它的运动部件。

    【讨论】:

      猜你喜欢
      • 2015-10-27
      • 2012-05-18
      • 2019-01-20
      • 1970-01-01
      • 2017-06-05
      • 2020-07-15
      • 2016-05-20
      • 2012-05-27
      • 1970-01-01
      相关资源
      最近更新 更多