架構
本頁以一張概覽圖呈現 go-redis-fallback 各元件的層級關係。
系統概覽
graph TB
Client[呼叫端] --> API[Get / Set / Del]
API --> Health{isHealth}
Health -->|正常| Mem[記憶體快取 sync.Map]
Health -->|正常| Redis[(Redis)]
Health -->|Fallback| Mem
Mem -->|Fallback 未命中| File[本地 JSON 檔]
API -->|Fallback 寫入| Writer[批次寫檔 Writer]
Writer --> File
Redis -->|重試用盡| Checker[健康檢查 Ticker]
Checker -->|Ping 成功| Recovery[恢復流程]
Recovery --> File
Recovery --> Redis
Sweeper[30 秒過期掃除] --> Mem
Sweeper --> File
分層
| 層 | 原始碼 | 職責 |
|---|---|---|
| 公開 API | get.go、set.go、del.go、instance.go |
讀取健康旗標,分派到 Redis 或本地路徑 |
| 讀取路徑 | get.go |
記憶體優先、Redis 重試、降級、從檔案還原 |
| 模式切換與恢復 | sync.go |
健康檢查 Ticker、恢復回灌、本地檔案清理、讀取修補 |
| 批次寫檔 | writer.go |
佇列、依 key 合併、定時並行落檔 |
| 檔案佈局與過期判斷 | unit.go |
MD5 三層分片路徑、TTL 判斷 |
跨層原則
| 原則 | 實作位置 |
|---|---|
| 記憶體快取是每一條路徑的第一站,兩種模式都先查它 | get.go:24、get.go:64 |
| 模式切換發生在失敗的那一次呼叫內,呼叫端不需重試 | get.go:52-57、set.go:50-55 |
| 本地檔案只是 fallback 期間的暫存,恢復後一律刪除 | sync.go:84-87 |
| TTL 以「寫入時間 + 秒數」儲存,每一層讀取都重新計算 | unit.go:26-31 |
延伸閱讀
模組級圖表(讀取路徑、恢復、寫入路徑)、完整序列圖與狀態機見 repo 內的 doc/architecture.zh.md。