iT邦幫忙

鐵人檔案

2026 iThome 鐵人賽
回列表
Software Development

手刻 Redis:用 Go 從零打造高效能高併發的記憶體資料庫 系列

本系列將以 Go 語言從零手寫一個相容 Redis RESP 協定的高併發記憶體資料庫,不只學會「用」Redis,更深入其底層運作。30 天內逐步完成:RESP 協定解析器、高併發 TCP 伺服器、String/List/Hash/Set/Sorted Set 五大資料結構(含手寫跳躍表)、TTL 過期與記憶體淘汰(LRU/LFU)、AOF/RDB 持久化、主從複製,以及事務、Pub/Sub、Pipeline 等進階機制,最後以 redis-benchmark 與 pprof 進行效能驗證。適合想深入資料庫底層與網路程式設計的開發者。

參賽天數 25 天 | 共 25 篇文章 | 2 人訂閱 訂閱系列文 RSS系列文
DAY 11

Day 11:實作核心資料結構 Set 與集合操作命令

Redis 的 Set (集合) 是一個無序且**成員唯一(Unique)**的字串容器。平常開發拿來存標籤(Tags)、IP 白名單或共同好友很方便。 今天來...

2026-08-28 ‧ 由 tim1101 分享
DAY 12

Day 12:實作跳躍表(Skip List)與有序集合 Sorted Set 命令

終於來到記憶體儲存引擎這一段的尾聲了。今天要碰 Redis 裡很有代表性的資料結構:Sorted Set (有序集合,簡稱 ZSet)。 ZSet 每個成員(M...

2026-08-29 ‧ 由 tim1101 分享
DAY 13

Day 13:整合Command Dispatcher與協定整合

前面我在 resp 模組寫了 RESP 解析器,db 模組也建好了記憶體 KV 引擎,但這兩個現在還是各過各的。 今天要在 command 模組裡補上Comma...

2026-08-30 ‧ 由 tim1101 分享
DAY 14

Day 14:實作命令處理 - 基礎命令與 Key-Value String 操作

昨天把 Command Dispatcher 接起來後,今天就來補真正會被呼叫的 command handler。先從 PING、ECHO 這種基礎命令,以及...

2026-08-31 ‧ 由 tim1101 分享
DAY 15

Day 15:實作命令處理 - 整合 List、Hash、Set 與 ZSet 命令

String 指令跑通後,今天換把 List、Hash、Set 和 ZSet 這四個比較麻煩的結構接到 code/command/commands.go。 因為...

2026-09-01 ‧ 由 tim1101 分享
DAY 16

Day 16:Redis 事務(Transaction)原理與 MULTI, EXEC, DISCARD 實作

在寫 SQL 時大家都聽過 ACID,但在 Redis 裡,事務(Transaction)其實就是把多個命令打包,然後一次性、按順序跑完不被打斷。 今天來實作這...

2026-09-02 ‧ 由 tim1101 分享
DAY 17

Day 17:發布與訂閱(Pub/Sub)廣播機制在 Go 中的設計與實作

Pub/Sub (發布/訂閱) 拿來做聊天室或事件廣播很方便,發送者不用管有誰在聽,只要往頻道一丟,訂閱的客戶端就全都會收到。 今天來實作一個thread-sa...

2026-09-03 ‧ 由 tim1101 分享
DAY 18

Day 18:支援 Pipeline 批次命令處理與 TCP 讀取效能優化

如果要一次塞幾萬筆資料給 Redis,一問一答的網路來回延遲絕對會讓你等到睡著。 Redis 為了解這個問題提供了 Pipeline (管道)。今天就來看之前寫...

2026-09-04 ‧ 由 tim1101 分享
DAY 19

Day 19:Redis 持久化之 AOF (Append-Only File) 原理解析與基礎實作

記憶體資料庫最怕的就是突然停電,辛辛苦苦存的資料瞬間灰飛煙滅。為了解決這問題,Redis 提供了 AOF (Append-Only File) 日誌與 RDB...

2026-09-05 ‧ 由 tim1101 分享
DAY 20

Day 20:實作 AOF 的每秒非同步 fsync(everysec)機制

昨天雖然寫了 os.File.Write,但作業系統很聰明,會先把資料快取在 Page Cache 裡,不會馬上寫進磁碟。如果這時候當機,資料照樣不見。 今天來...

2026-09-06 ‧ 由 tim1101 分享