在寫 SQL 時大家都聽過 ACID,但在 Redis 裡,事務(Transaction)其實就是把多個命令打包,然後一次性、按順序跑完不被打斷。 今天來實作這...
String 指令跑通後,今天換把 List、Hash、Set 和 ZSet 這四個比較麻煩的結構接到 code/command/commands.go。 因為...
昨天把 Command Dispatcher 接起來後,今天就來補真正會被呼叫的 command handler。先從 PING、ECHO 這種基礎命令,以及...
前面我在 resp 模組寫了 RESP 解析器,db 模組也建好了記憶體 KV 引擎,但這兩個現在還是各過各的。 今天要在 command 模組裡補上Comma...
終於來到記憶體儲存引擎這一段的尾聲了。今天要碰 Redis 裡很有代表性的資料結構:Sorted Set (有序集合,簡稱 ZSet)。 ZSet 每個成員(M...
Redis 的 Set (集合) 是一個無序且**成員唯一(Unique)**的字串容器。平常開發拿來存標籤(Tags)、IP 白名單或共同好友很方便。 今天來...
Redis 的 Hash 很適合存物件資料,不用每次都把整包 JSON 存進去;只改某個欄位時,直接動那個 field 就好。它其實就是 field 到 val...
Redis 的 List 很常拿來做 Message Queue,或是處理需要從頭尾推資料的場景。它本質上是一串二進位安全字串。 今天來做 List,先補最常用...
用過 Redis 的人都知道 EXPIRE 很好用,時間一到資料就不見了。這在快取、驗證碼與臨時鎖等場景中是很重要的特性。 今天就來把 TTL 和惰性刪除(La...
引擎骨架弄好後,今天直接來實作最基本的 String 操作:SET、GET、DEL 和 EXISTS。 基礎命令的設計與實作 我在 code/db/db.go...
網路和 Parser 搞定後,今天終於要進到重頭戲:記憶體資料庫引擎。 今天先把 Thread-safe 的記憶體儲存引擎做出來,讓後面的命令有地方可以真的讀寫...
昨天把單行解析補完後,今天換處理 RESP 裡比較容易寫錯的兩個型別:Bulk Strings (二進位安全字串) 與 Arrays (陣列)。這兩個一個要處理...
昨天把 Parser 的骨架搭好了,今天就直接來寫解析邏輯吧。 我先挑比較軟的柿子吃,從 RESP 裡三種單行資料型態開始:Simple Strings (簡單...
要自己刻 Redis,第一步當然是要讓 Server 聽得懂 Client 在講什麼。Redis 客戶端與伺服器之間進行通訊時,使用的是一種名為 RESP (R...
寫資料庫引擎之前,網路層得先站穩。Redis 之所以快,底層事件模型佔了很大一部分;我雖然不用在 Go 裡手刻 epoll,但還是得先做出一個可以同時處理多個...
為什麼要自己寫一個 Redis? Redis 很多人都用過,拿來做快取、工作佇列、分散式鎖都很順手。但我一直覺得只停在「會用」有點可惜,尤其是它背後的網路 I/...
FlyingPress 團隊在 2026 年 6 月 24 日公布支援 Redis 物件快取 (Object Caching),這雖然不算非常新型的技術,但對...
筆記:Redis 緩存雪崩(Cache Avalanche) 有些 Redis 的快取資料會設定 TTL 來讓它自然的過期,但如果這種會過期的快取資料多,而過期...
筆記:Redis 緩存穿透(Cache Penetration) 在系統架構的實作裡,常為了減輕後端資料庫的負擔,通常會在程式跟資料庫之間隔一層快取層(例:Re...
前情提要 經過 Day 25 的 JWT 與 Session 管理建置,我們已經有了完整的用戶認證機制。今天我們要為 Kyo System 實作企業級的 API...
前情提要 經過 Day 24 的 Email 服務建置,我們已經有了完整的使用者溝通管道。今天我們要實作用戶認證系統的後端核心:JWT (JSON Web To...
前情提要 在 Day 21 我們建立了測試框架的基礎設施,使用 Node.js 內建測試執行器來撰寫單元測試。今天我們要更進一步,實作整合測試 (Integra...
前情提要 經過前面 19 天的開發,我們已經建立了一個完整的企業級後端 SaaS 服務。今天是 30 天挑戰的 2/3 里程碑,讓我們來看點這 20 天打造的...
前情提要 在 Day 17 我們建立了 WebSocket 微服務架構,今天我們要聚焦在後端效能優化。從資料庫連線池管理、查詢優化、快取策略到背景任務處理,我們...
前情提要 在 Day 15 我們建構了課程模板系統的後端架構,今天我們將實作一個完整的即時協作引擎。這個系統需要支援多用戶同時操作、即時資料同步、衝突檢測與解決...
前情提要 在 Day 14 我們建立了基礎的課程管理系統,今天我們將深入實作課程模板系統的後端架構。這個系統不僅要支援複雜的模板管理,還需要處理大量批次操作、衝...
Go 語言搶票煉金術 Day 15 - 提供服務:用 Gin 暴露你的搶票 API 在 Day 10~Day 14,我們把「主要熱點」搬進 Redis,並用...
Day 14 - Redis 的終極武器:Lua Script 的實踐 昨天,我們用 client.Eval() 成功地執行了第一個 Lua 腳本,解決了多個...
Go 語言搶票煉金術:Day 13 - 原子性的延伸:單一命令不夠用時,如何用 Lua 在 Redis 當中實現 在前幾篇中,我們用 Redis DECRBY...
前情提要 經過 Day 11 的認證服務建立,我們已經有了完整的多租戶身份認證系統。今天我們要實作會員管理服務 (Member Service),這是健身房 S...