本系列將以 Go 語言從零手寫一個相容 Redis RESP 協定的高併發記憶體資料庫,不只學會「用」Redis,更深入其底層運作。30 天內逐步完成:RESP 協定解析器、高併發 TCP 伺服器、String/List/Hash/Set/Sorted Set 五大資料結構(含手寫跳躍表)、TTL 過期與記憶體淘汰(LRU/LFU)、AOF/RDB 持久化、主從複製,以及事務、Pub/Sub、Pipeline 等進階機制,最後以 redis-benchmark 與 pprof 進行效能驗證。適合想深入資料庫底層與網路程式設計的開發者。
Redis 的 Set (集合) 是一個無序且**成員唯一(Unique)**的字串容器。平常開發拿來存標籤(Tags)、IP 白名單或共同好友很方便。 今天來...
終於來到記憶體儲存引擎這一段的尾聲了。今天要碰 Redis 裡很有代表性的資料結構:Sorted Set (有序集合,簡稱 ZSet)。 ZSet 每個成員(M...
前面我在 resp 模組寫了 RESP 解析器,db 模組也建好了記憶體 KV 引擎,但這兩個現在還是各過各的。 今天要在 command 模組裡補上Comma...
昨天把 Command Dispatcher 接起來後,今天就來補真正會被呼叫的 command handler。先從 PING、ECHO 這種基礎命令,以及...
String 指令跑通後,今天換把 List、Hash、Set 和 ZSet 這四個比較麻煩的結構接到 code/command/commands.go。 因為...
在寫 SQL 時大家都聽過 ACID,但在 Redis 裡,事務(Transaction)其實就是把多個命令打包,然後一次性、按順序跑完不被打斷。 今天來實作這...
Pub/Sub (發布/訂閱) 拿來做聊天室或事件廣播很方便,發送者不用管有誰在聽,只要往頻道一丟,訂閱的客戶端就全都會收到。 今天來實作一個thread-sa...
如果要一次塞幾萬筆資料給 Redis,一問一答的網路來回延遲絕對會讓你等到睡著。 Redis 為了解這個問題提供了 Pipeline (管道)。今天就來看之前寫...
記憶體資料庫最怕的就是突然停電,辛辛苦苦存的資料瞬間灰飛煙滅。為了解決這問題,Redis 提供了 AOF (Append-Only File) 日誌與 RDB...
昨天雖然寫了 os.File.Write,但作業系統很聰明,會先把資料快取在 Page Cache 裡,不會馬上寫進磁碟。如果這時候當機,資料照樣不見。 今天來...