后端岗位面试题更新 2026-08-05

请对比 Redis 事务与关系型数据库事务,说明两者在原子性、一致性、隔离性和持久性方面的主要差异,并解释 Redis 事务的 WATCH 命令如何影响 CAS 行为。

后端开发系统设计技术原理Redis

考察说明

考查对 Redis 事务模型与关系型数据库 ACID 特性的理解,以及 WATCH 条件更新的掌握。

回答思路

  1. 【回答框架 1】Redis 事务通过 MULTI、EXEC、DISCARD 和 WATCH 实现,将多个命令按顺序排队,EXEC 时按序执行。与关系型数据库事务不同,Redis 事务不保证原子性,如果某条命令执行失败,其他命令仍会执行,不支持回滚。
  2. 【回答框架 2】在一致性方面,Redis 事务在 EXEC 之前不会执行命令,因此不会出现部分执行的中间状态,但若执行中出错,数据库可能处于不一致状态。关系型数据库通过 ACID 保证强一致性,Redis 则提供较弱的一致性保证。
  3. 【回答框架 3】隔离性上,Redis 是单线程执行,事务内命令依次执行,天然隔离,但 WATCH 命令用于乐观锁,通过监视键在 EXEC 时检查是否被其他客户端修改,若被修改则整个事务终止。关系型数据库通过锁和 MVCC 提供不同隔离级别。
  4. 【回答框架 4】持久性方面,Redis 事务的持久性依赖于 RDB 和 AOF 持久化配置,默认可能丢失数据,而关系型数据库通常通过 WAL 保证持久性。
  5. 【关键点 1】Redis 事务不支持回滚,命令执行失败不阻塞其他命令。
  6. 【关键点 2】WATCH 提供 CAS 语义,键被修改则事务被取消。
  7. 【关键点 3】Redis 单线程执行保证事务内命令的串行性,隔离性实现简单。
  8. 【易错点 1】误认为 Redis 事务具备原子性,实际其不具备完全的原子性。
  9. 【易错点 2】忽略 WATCH 需要在 MULTI 之前调用,否则无法实现 CAS。
  10. 【易错点 3】混淆持久性保证,Redis 默认配置下可能丢失数据。