大家好,我是 31 岁、积极活泼、爱分享技术的小米,又来给你们搬运我社招面试中的真实经历啦!
今天的小故事来自于上周五的一个下午。当时我正拎着一杯芋圆奶茶,在一个光线柔和的会议室里,迎面坐着一个笑容温柔但眼神很专业的资深面试官。
他喝了一口美式,突然抛出一个看似轻飘飘的问题:
“小米,你给我说说,什么是事务?还有,Redis 事务是怎么实现的?三个阶段是什么?相关命令有哪些?”
那一刻我差点被芋圆噎住。不过没关系,咱技术人越紧张越要稳住,我把奶茶放下,脑子里以 5G 速度回放我踩过的坑,然后开始了我那套“奶茶事务”理论……
今天我就把当时的思考过程完整讲给你听,让你以后面试再遇到这种题,不紧张,不慌张,一杯奶茶讲给面试官听就行。
故事开场:奶茶店里的“事务”我问面试官:“我能用个生活例子回答吗?”
他点点头。于是我说 :
想象你去奶茶店点了一杯 加珍珠、加芋圆但不要冰 的奶茶,这就是一个业务操作,包含多个步骤:
拿杯子
加珍珠
加芋圆
倒奶茶
封杯
这五步必须全部成功,你才能喝到那杯“米氏特调”。如果第三步“没芋圆了”,那这一杯就不应该做出来,要直接整单作废重新点。这其实就是:事务的本质(数据库事务)
事务(Transaction)是一组要么全部成功、要么全部失败的操作集合。
四大特性(ACID)也变得很好理解:
Atomicity(原子性):要么五步都执行,要么一杯都不做。
Consistency(一致性):不能出现“我没加芋圆却说给你加了”这种情况。
Isolation(隔离性):你点单的流程不应该被旁边那位小姐姐点单的流程干扰。
Durability(持久性):一旦奶茶做完封好杯,就不能第二天突然没了。
讲到这,面试官笑了,说:“不错,那你继续讲 Redis 事务。”于是我又喝了口奶茶,故事继续。
故事第二幕:Redis 的“事务”和数据库事务一点都不一样我接着讲:
Redis 的事务更像是:
给奶茶店老板报备要做哪几步,但他不会帮你判断中间有没有芋圆,也不会在做的过程中帮你回滚,全靠你自己保证流程正确。
Redis 事务的本质其实只有两点:
Redis 事务是命令的“批量顺序执行”:你把一堆命令放进“队列”,然后一次性提交。
Redis 事务不保证原子性(不支持回滚):只要命令语法正确,提交之后 Redis 就一个一个执行,执行失败也不会回滚之前的命令。
面试官点点头,表示认可。于是我继续讲 Redis 事务的三阶段模型。
Redis 事务的“三个阶段”:就像你点奶茶的完整流程我把 Redis 事务比作一个点单流程,让面试官更易理解。
第一阶段:命令入队(偏像你报备流程)
对应命令:MULTI
你对老板说:“我等下要做一杯奶茶,先不要急,听我报操作。”
Redis 回你:OK,开始排队吧。
此时所有后续命令都不会执行,而是进入队列。
第二阶段:命令排队(往队列里塞命令)
例如你执行:

Redis 不会执行,只会说:QUEUED(已排队)
这就像你在告诉老板:
先加珍珠
再加芋圆
再倒奶茶
老板只负责记录,不负责检查你讲的是不是废话。
第三阶段:执行事务(一次性全部提交)
使用命令:EXEC
Redis 开始按顺序执行你排队的所有命令。相当于你说:
“好了老板,开始做!”
老板照你说的流程一步步做。
特别注意:Redis 不支持回滚!
如果你的其中一步错了,比如:

只要不是语法错误,这个错误发生在执行期,Redis 不会停下,也不会回滚之前的操作。
就像你跟老板说:“先加珍珠,再加芋圆,再加冰块。”
结果你突然说:“哎呀我不喝冰的!”
老板会说:我已经加了冰,不退不改。
面试官继续追问:“那 Redis 如何防止别人篡改数据?”你以为事务讲完就结束了吗?
这时面试官又问我:
“如果在事务排队阶段,有其他客户端修改了我要操作的数据怎么办?”
我笑着说:“Redis 已经替你想到这一点了!”
于是我讲了一个卖座的小故事:
Redis 的 WATCH:像贴在奶茶杯上的“封条”你开始排队点单时,你可以告诉老板:“这个杯子贴上封条,别人不能动。”
Redis 的做法就是:
WATCH key1 key2 ...
它的意思是:我盯着这些 key,如果事务提交前它们被别人改了,我的事务就失败。
比如:
客户端 A 执行:

如果此时客户端 B 修改了 balance:
SET balance 9999
则 A 的 EXEC 会失败:
(nil)
就像老板发现有人撕开了封条,会告诉你:杯子被动过了,事务不能执行,你要不要重新来一杯?
这就是 Redis 乐观锁最经典的应用场景。
Redis 事务的全部命令总结(面试官最爱问)为了让面试官彻底满意,我把所有命令一口气总结:


你只要把这些记住,面试现场绝对稳稳的。
讲完故事后,面试官点头了讲完以上内容后,面试官靠着椅背,看了我几秒,然后说:
“小米你这个讲奶茶的比喻挺有意思。逻辑清晰,场景化强,讲明白了。”
然后他做了个让我差点激动落泪的动作:在简历上写了一个大大的 √ 。
那一刻我深吸一口气,感觉奶茶又变甜了。
最后的总结(面试话术版)如果你在面试时遇到同样的问题,可以直接这样回答:
1、什么是事务?
事务是一组操作,要么全部成功,要么全部失败,具有 ACID 特性。
2、Redis 事务的概念?
Redis 事务是通过将命令排队并一次性顺序执行,实现“批处理”的效果。
Redis 事务不支持自动回滚,只保证命令执行过程不会被其他客户端中断。
3、Redis 事务的三个阶段?
MULTI 开启事务
命令入队并排队
EXEC 执行事务
4、Redis 事务相关命令?
MULTI
EXEC
DISCARD
WATCH
UNWATCH
END希望今天的小故事,可以让你在下一次面试时,不但答出 Redis 事务,还能答得又稳又好。
如果你喜欢我这种“讲故事 + 奶茶类比”的技术分享方式,记得告诉我,我会继续更新更多社招高频题!