兩種設計對比
| 維度 | ICache<T> (Key=Serializable) | ILocalCache<K,V> (Key=泛型) |
| 適用場景 | 分布式緩存,Key 必須序列化傳輸 | 本地緩存,Key 類型自由(String/Long/Enum/對象) |
| 類型安全 | 編譯期僅限 Serializable 子類 | 完全泛型,編譯期任意類型 |
| 實現複雜度 | 統一序列化邏輯簡單 | 需判斷 Key 是否 Serializable 分支處理 |
| 分布式擴展 | 天然支持 | 需額外約束 K 實現 Serializable |
選型建議
- 僅做本地緩存:用 `ILocalCache`,靈活、性能高(無序列化開銷)。
- 需分布式/集群:Key **強制實現 `Serializable`**,建議接口定義为 `ICache` 或提供 `DistributedCache` 子接口。
- 雙模式共存:定義基接口 `Cache`,本地實現無約束,分布式實現加約束:
public interface Cache {
V get(K key);
void put(K key, V value);
}
public interface DistributedCache extends Cache {
// 額外分布式操作:集群失效、監聽等
}
最佳實踐
- Key 建議使用 **不可變類型**(String、Long、包裝類型),避免哈希碰撞/異常。
- Value 實現 `Serializable` 便於未來分布式遷移。
- 引入 **JCache (JSR-107)** 標準註解 (`@CacheResult` 等) 統一編程模型。