iT邦幫忙

鐵人檔案

2026 iThome 鐵人賽
回列表
Software Development

從零開始打造 Redis:以 Go 建立 Production Ready 應用程式 系列

在本系列中文章中,將會用 Go 建立一個與 Redis 相容的服務:這其中融合了我這幾年 Go 語言的經驗、技巧以及架構思考。

本系列適合對 Go 有一些基礎的朋友(有其它程式語言經驗的亦可,但可能會需要習慣一下 Go Style),希望我們在這個旅程中能收獲滿滿。

參賽天數 14 天 | 共 29 篇文章 | 1 人訂閱 訂閱系列文 RSS系列文
DAY 11

[Day 11] Redis 指令與 PING 實作

在實作 Redis 指令之前,我們可以預先構想一下這些指令應該怎麼被處理。 工廠模式 是一個重要的設計模式之一,它讓開發者能夠專注在單一功能的實作上(以這個專案...

2026-08-25 ‧ 由 芥龍 分享
DAY 12

[Day 12] Redis 指令實作:GET 與 SET

灌水了 11 天的文,我們終於可以進到整個 Redis 最核心的功能:鍵值存儲。 資料儲存 在實際設計 GET 與 SET 時,我們應該要先決定資料如何被儲存。...

2026-08-26 ‧ 由 芥龍 分享
DAY 12

[Day 13] 資料持久化(上):AOF 的實現

Redis 作為一個資料庫,其最重要的特性就是_ Data Persistence(資料持久化)_:當用戶儲存了一個值之後,在下次重新啟動服務這個值也應該是有效...

2026-08-26 ‧ 由 芥龍 分享
DAY 13

[Day 14] 資料持久化(中): Middleware

在實現了 service.(AOF) 之後,我們需要思考如何優雅地使用這個介面。 誠然,直接在 SET 指令裡注入這個服務,並且當寫入 repo.(*mapSt...

2026-08-27 ‧ 由 芥龍 分享
DAY 14

[Day 15] 資料持久化(下):從 AOF 恢復資料

從 AOF 恢復資料 server.(Restorer) 介面 定義一個 server.(Restorer) 介面,並且實作 server.(*aofResto...

2026-08-28 ‧ 由 芥龍 分享
DAY 14

[Day 16] 測試(上):單元測試與基準測試

測試是軟體工程中不可或缺的一環,而同時也是 Go 原生支援的特性:只要建立 _test.go 尾綴的檔案,go test 就可以直接使用。 單元測試 resp....

2026-08-30 ‧ 由 芥龍 分享
DAY 14

[Day 17] 測試(下):stub 與 mock

讓我們來回顧一下 cmd.(Command) 的介面與實作:如果想要加入新的 Redis 指令,只需要實作 cmd.(Command) 這個介面,並且在 cmd...

2026-08-30 ‧ 由 芥龍 分享
DAY 14

[Day 18] Graceful Shutdown(上):信號與處理

對於一個 Server Client 服務,考慮到網路傳輸成本或是系統內部處理效率等因素,客戶端發出請求之後往往需要等候一小段時間才能獲得回應。 如果在這時伺服...

2026-08-30 ‧ 由 芥龍 分享
DAY 14

[Day 19] Graceful Shutdown(中):處理尚未完成的請求與閒置請求

net.(Listener).Close() 之後做了什麼? 回顧目前的 Server: // file: ./internal/server/server.g...

2026-08-30 ‧ 由 芥龍 分享
DAY 14

[Day 20] Graceful Shutdown(下):超時處理

我們不可能永遠等待 s.wg.Wait() 阻塞,一般服務都會定義強制關閉的超時機制。 註:絕大多數以虛擬機器為基礎的雲服務(AWS EC2, GCP Clo...

2026-08-30 ‧ 由 芥龍 分享