iT邦幫忙

鐵人檔案

2026 iThome 鐵人賽
回列表
Software Development

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

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

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

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

[Day 01] 在旅程開始之前

嗨,我是芥龍!很高興能與你見面! 關於這個主題 在幾個月前,閒閒沒事的我在網路上衝浪,並且找到了 Build Your Own X 這個 GitHub Repo...

2026-08-15 ‧ 由 芥龍 分享
DAY 2

[Day 02] Redis 簡介

Redis 是一個用 C 寫成的鍵值資料庫,顧名思義:儲存「鍵(Key)」與「值(Value)」的資料庫。 基礎功能 可以將 Redis 想像成一個巨大的 Ha...

2026-08-16 ‧ 由 芥龍 分享
DAY 3

[Day 03] 專案初始化

在 Go 1.13 之後,官方提供了套件管理功能 Go Module,同時也寫了一篇指南 Tutorial: Create a Go module。 我們可以用...

2026-08-17 ‧ 由 芥龍 分享
DAY 4

[Day 04] TCP Server

與我們常見的 HTTP Server 不同,Redis 採用 TCP Server 實作,並且在這之上設計了自己的通訊協定 Redis serializatio...

2026-08-18 ‧ 由 芥龍 分享
DAY 5

[Day 05] App:應用程式基礎建設

截至目前為止,我們都把程式碼全部塞在 ./cmd/olivine/main.go 裡--雖然 AI 常常這麼幹,但這顯然不是個好主意。 App 結構體 我一般會...

2026-08-19 ‧ 由 芥龍 分享
DAY 6

[Day 06] Server:伺服器提供者

雖然我們進一步將原本擠在 ./cmd/olivine/main.go 中的實作原封不動塞進 ./cmd/olivine/app.go 中,但這其實並沒有實際解決...

2026-08-20 ‧ 由 芥龍 分享
DAY 7

[Day 07] RESP2(上):Redis 的通訊協定--資料型態與值

我們必須要講相同的語言,才有辦法與其它人溝通。同樣地,如果我們想要與 Redis 溝通,就必須使用 Redis serialization protocol(簡...

2026-08-21 ‧ 由 芥龍 分享
DAY 8

[Day 08] RESP(中):Redis 的通訊協定--BulkString 與 Array

BulkString 與 Array BulkString 根據 RESP 的規格,存在兩種 BulkString: BulkString Null B...

2026-08-22 ‧ 由 芥龍 分享
DAY 9

[Day 09] RESP(下):Redis 的通訊協定--指令

在昨天的文章中有提到,本質上 redis-cli 在發送指令的時候就是發送一組「由 BulkString 組成的 Array」,在未來的文章中我們會用「Redi...

2026-08-23 ‧ 由 芥龍 分享
DAY 10

[Day 10] Redis 指令管線

在每次 server.(*simpleSrv).serve() 執行完之後都會呼叫 defer conn.Close(),所以每次都必須重新連線才能執行 Red...

2026-08-24 ‧ 由 芥龍 分享