Redis 事务
面试官问:"Redis 有事务吗?"
小陈说:"有,MULTI 和 EXEC。"
面试官追问:"那 Redis 事务能回滚吗?"
小陈说:"...可以?"
面试官继续追问:"如果中间一条命令失败了,其他命令会怎样?"
小陈答不上来。
Redis 事务是面试中的高频题。这道题能说清楚 MULTI/EXEC/WATCH 的用法和 Redis 不支持回滚的原因的候选人,对 Redis 事务机制有深入理解。
一、Redis 事务基础 🔴
1.1 MULTI/EXEC
1.2 Redis 事务的特点
1.3 ❌ 错误示范
候选人原话:"Redis 事务支持回滚。"
问题诊断:Redis 事务不支持回滚。如果事务中某条命令失败,其他命令仍然会执行。
候选人原话 2:"Redis 事务就是 MySQL 的事务。"
问题诊断:完全不同。MySQL 事务是 ACID 的,支持回滚;Redis 事务只是批量执行,不保证原子性(命令失败不回滚其他命令)。
【面试官心理】 这道题我会问"为什么 Redis 不支持回滚"。能说清楚"Redis 设计哲学是简单高性能,事务回滚开销大"的候选人,说明他理解了 Redis 的设计理念。
二、WATCH 实现乐观锁 🟡
2.1 WATCH 的用法
2.2 WATCH 的实现原理
2.3 WATCH 取消
三、Pipeline vs 事务 🟡
3.1 对比
3.2 Lua 脚本
四、生产选型 🟢
4.1 选型建议
【面试官心理】 Redis 事务是面试中的高频题。能说清楚 WATCH 的乐观锁实现、以及 Redis 事务和 Lua 脚本的区别的候选人,说明他对 Redis 的并发控制有深入理解。