目前是金融相關的全端工程師,工作中沒用過 Redis,也沒真正遇過高併發,但我對「活動開始的瞬間湧入幾十萬人的系統怎麼活下來」很好奇。這 30 天,我會從零學 Redis,用電商場景當練習題:從資料型別、持久化、叢集,一路走到快取三災、分散式鎖與秒殺防超賣。沒有高併發環境,那就用壓測自己造一個,親眼看超賣發生,再用 Redis 修好它。這是一份從零開始的自學筆記。
Day 5 購物車用 Hash 而不是 String,理由是 HINCRBY 改一個欄位不用讀寫整包。 但同樣一個 Hash、同樣只放一個欄位,有的 key 佔...
Day 4 的商品快取每個 key 都設了 TTL,理由是「不設就永遠佔著記憶體」。 但設了 TTL 的 key,時間到的那一秒記憶體就還回來了嗎?並沒有。ke...
Day 12 的結論是過期的 key 不一定馬上被刪掉。那如果刪不夠快,記憶體真的滿了會怎樣? 很多人以為 Redis 會自己清掉舊的然後撐下去。但預設不會,滿...
Day 13 結尾說容器一重開資料就全沒了。其實沒有,之前到現在重開過好幾次,前幾天存的 key 都還在。 因為 Redis 會自己把記憶體裡的東西寫到硬碟上。...
Day 14 最後那 5 筆沒掉,是 AOF 救回來的。 RDB 是隔一段時間拍一張照,AOF 比較像記帳:每一筆寫入指令照順序記下來,重開的時候從頭再跑一遍。...
Day 14、15 的 RDB 跟 AOF,檔案都存在同一台機器的硬碟上。硬碟壞了、整台機器掛了,檔案一樣跟著沒。 主從複製就是多開一台 Redis,主節點寫進...
Day 16 最後說過,主節點掛了,從節點只會一直重連,不會自己升上去。要有人手動把從節點升成主節點,App 連線的位址也要跟著改。 Sentinel(哨兵)就...
Day 17 的 Sentinel 解決了「主節點掛了有人接手」,但能寫的還是只有一台主節點,資料也要一台裝得下。 Cluster(叢集)的做法是開好幾台主節點...
Day 18 最後說到,不管單機還是 Cluster,指令都是一個一個送:送出去、等回覆、再送下一個。Redis 執行一個 SET 很快,時間大多花在來回的路上...
Day 19 的 MULTI 排隊的時候指令還沒執行,拿不到值,沒辦法「先看有沒有庫存、有才扣」。 Lua 是一種很小的程式語言,Redis 裡面就有內建。把判...