文件 v1.0.0

架構

本頁以一張概覽圖呈現 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。

EN