我曾经调用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)
{}
这涉及两个IO,而不是前一次调用中的一个。应用程序代码中是否真的需要这种锁定? Azure的缓存框架是否不考虑缓存一致性?在Azure中管理缓存写入的标准方法是什么?何时使用Put和PutAndUnlock?