本系列將以 Go 語言從零手寫一個相容 Redis RESP 協定的高併發記憶體資料庫,不只學會「用」Redis,更深入其底層運作。30 天內逐步完成:RESP 協定解析器、高併發 TCP 伺服器、String/List/Hash/Set/Sorted Set 五大資料結構(含手寫跳躍表)、TTL 過期與記憶體淘汰(LRU/LFU)、AOF/RDB 持久化、主從複製,以及事務、Pub/Sub、Pipeline 等進階機制,最後以 redis-benchmark 與 pprof 進行效能驗證。適合想深入資料庫底層與網路程式設計的開發者。
AOF 持久化是追加模式,也就是說系統跑越久,AOF 檔案就會越大。如果同一個 Key 被改了一萬次,AOF 就老老實實記下一萬條指令。 但實際上,歷史紀錄不重...
前幾天我弄好了 AOF 追加日誌。AOF 雖然資料安全,但缺點就是檔案有夠大,資料一多,重啟時 replay 指令會跑到讓人想睡覺。 所以 Redis 還有另一...
昨天先把 RDB 的資料模型定下來,今天就直接在 code/db/rdb.go 補 SaveRDB 和 LoadRDB,順便把 Server 啟動時的資料恢復流...
記憶體很貴,如果一直狂寫資料都不清理,遲早會遇到 OOM 爆掉。 為了避免這慘況,Redis 有套記憶體淘汰機制(Eviction Policy)。當記憶體快滿...
昨天弄好了 LRU,但 LRU 其實有個坑:如果一個 Key 過去一年被讀了一百萬次,但剛好這幾分鐘沒被讀;另一個沒什麼價值的 Key 剛好被寫入又讀了一次。L...