大家好,我是 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 事務,還能答得又穩又好。
如果你喜歡我這種“講故事 + 奶茶類比”的技術分享方式,記得告訴我,我會繼續更新更多社招高頻題!
我是小米,一個喜歡分享技術的31歲程序員。如果你喜歡我的文章,歡迎關注我的微信公眾號“軟件求生”,獲取更多技術乾貨!