一、FlushAll() キャッシュ全削除
mClient.Store(StoreMode.Set, "key1", 1234L);
Console.Write(mClient.Get("key1")); // 1234 を正常取得
mClient.FlushAll();
Console.Write(mClient.Get("key1")); // null が出力Code language: JavaScript (javascript)
主なポイント
FlushAll():Memcachedサーバー上の全キーを削除します。取り扱いに十分注意してください!
- 本番環境では実行禁止。業務キャッシュがすべて消えてしまいます;
- 既存データを無効化するだけでメモリ解放は行われません(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 はnullのままCode language: JavaScript (javascript)
Get() と TryGet() の比較
| メソッド | 特徴 | 利用シーン |
|---|---|---|
mClient.Get(key) | キーがない場合nullを返す。「キャッシュ値自体がnull」と「キーが存在しない」を区別できない | 単純な読み込みでキーの有無を気にしない場合 |
mClient.TryGet(key, out obj) | 真偽値でキーの存在を判定。2種類のnull状況を正確に判別可能 | キャッシュヒット判定が必要な業務で推奨 |
ジェネリック版も利用可:mClient.TryGet<T>(key, out T value)
注意点
FlushAll()はサーバー側コマンド。クラスタ構成時は既定で全ノードのデータを消去します;- Memcachedは永続化に対応しておらず、サービス再起動でデータはすべて喪失;
- キャッシュ貫通対策として
TryGetを優先し、データベースへの大量アクセスを抑えてください。
その他の操作
Previous: オブジェクト保存