以前はメソッドを呼び出してPut(Key, Value)
、Azure キャッシュにデータを設定していました。後で、この方法では書き込み中に競合状態が発生する可能性があることを知り、データをキャッシュに設定する次のコードを導入しました。
try
{
if (GetData(key) == null)
{
_cache.Add(key, "--dummy--");
}
DataCacheLockHandle lockHandle;
TimeSpan lockTimeout = TimeSpan.FromMinutes(1);
_cache.GetAndLock(key, lockTimeout, out lockHandle);
if (ttlInMinutes == 0)
{
_cache.PutAndUnlock(key, value, lockHandle);
}
else
{
TimeSpan ttl = TimeSpan.FromMinutes(ttlInMinutes);
_cache.PutAndUnlock(key, value, lockHandle, ttl);
}
}
catch (Exception e)
{}
これには、前の呼び出しの 1 つに対して 2 つの IO が含まれます。このロックは、アプリケーション コードで本当に必要ですか? キャッシュの一貫性は、Azure のキャッシュ フレームワークによって処理されませんか? Azure でキャッシュ書き込みを管理する標準的な方法は何ですか? いつ Put を使用し、いつ PutAndUnlock を使用しますか?