核心概念
本頁說明 go-redis-fallback 的運作模式,以及 Get/Set/Del 在各模式下走哪一層儲存。
三層儲存
| 層 | 實作 | 生命週期 |
|---|---|---|
| 記憶體快取 | sync.Map,值為 Cache 結構 |
與實例同生命週期;只在過期時移除 |
| Redis | github.com/redis/go-redis/v9 client |
正常模式的主要儲存 |
| 本地 JSON 檔 | {DBPath}/{DB}/ 下以 key 的 MD5 分片的檔案 |
只在 fallback 期間寫入;恢復後刪除 |
運作模式
模式由內部旗標 isHealth 決定(type.go:57),每次 Get/Set/Del 開頭讀取一次。
| 模式 | 進入條件 | 健康檢查 |
|---|---|---|
| 正常 | 恢復流程完成(sync.go:89) |
不執行 |
| Fallback | 啟動 Ping 失敗,或讀寫 Redis 重試 MaxRetry 次皆失敗 |
每 TimeToCheck Ping 一次 |
| 本地模式(無健康檢查) | 啟動 Ping 成功,但恢復流程因 {DBPath}/{DB} 不存在而中止 |
不執行,永遠停留 |
第三種模式不是設計中的狀態,而是恢復流程提前返回的結果,詳見 已知限制。
各操作在不同模式下的行為
| 操作 | 正常模式 | Fallback/本地模式 |
|---|---|---|
Get |
記憶體 → Redis(重試)→ 失敗時切換並改走本地路徑 | 記憶體 → 本地 JSON 檔 |
Set |
寫 Redis(重試),成功後寫記憶體;失敗時切換並改走本地路徑 | 寫記憶體並排入批次寫檔 |
Del |
刪記憶體、刪檔、刪 Redis 鍵 | 刪記憶體、刪檔 |