一、FlushAll() 清空快取
mClient.Store(StoreMode.Set, "key1", 1234L);
Console.Write(mClient.Get("key1")); // 正常讀取 1234
mClient.FlushAll();
Console.Write(mClient.Get("key1")); // 輸出 nullCode language: JavaScript (javascript)
重點說明
FlushAll():清除 Memcached 伺服器上全部 Key,務必謹慎使用!
- 正式環境禁止呼叫,會刪除全部業務快取資料;
- 僅讓既有資料失效,不會釋放記憶體(Memcached 惰性回收機制)。
二、TryGet 安全讀取快取
object obj = null;
var isSuc = mClient.TryGet("key1", out obj );
// 索引存在:isSuc=true,obj =1234
isSuc = mClient.TryGet("key1", out obj );
// 索引不存在:isSuc=false,obj 維持 nullCode language: JavaScript (javascript)
Get() 與 TryGet() 比較
| 方式 | 特性 | 適用場景 |
|---|---|---|
mClient.Get(key) | Key 不存在回傳 null;無法分辨「快取值本身就是 null」和「Key 不存在」兩種狀況 | 簡單讀取,不在意索引是否存在 |
mClient.TryGet(key, out obj) | 透過布林回傳值判斷 Key 是否存在;精準區分兩種 null 情境 | 業務需要判斷快取是否命中,建議優先採用 |
同樣支援泛型寫法:mClient.TryGet<T>(key, out T value)
注意事項
FlushAll()屬於伺服器端指令,叢集部署預設會清空全部節點的資料;- Memcached 沒有持久化機制,服務重啟所有資料直接遺失;
- 建議使用
TryGet做快取穿透防護,避免大量請求直接打向資料庫。
其餘操作
Previous: 物件儲存