我正在使用以下代码将数据添加到我的缓存中:
public void Add(string key, object item, int duration)
{
if (DataCacheHelper.DataCache.Get(key) == null)
{
if (duration > 0)
{
DataCacheHelper.DataCache.Add(key, item, new TimeSpan(0, 0, 0, 0, duration));
}
else
{
DataCacheHelper.DataCache.Add(key, item);
}
}
else
{
Update(key, item);
}
}
注意我在添加数据或添加数据之前如何使用'if'语句。
有谁知道我在这一切中缺少什么?
该程序在具有2个实例的Azure云服务上运行。不确定这与它有什么关系。
感谢。
答案 0 :(得分:1)
您可以使用DataCache.Put添加或替换缓存的对象:
如果在调用此方法时该对象不存在,它将是 添加到缓存中。如果对象已经存在,它将是 更换。 (src)
这是结果方法:
public void Add(string key, object item, int duration)
{
if (duration > 0)
{
DataCacheHelper.DataCache.Put(key, item, new TimeSpan(0, 0, 0, 0, duration));
}
else
{
DataCacheHelper.DataCache.Put(key, item);
}
}
答案 1 :(得分:0)
使用Add
时,需要同步线程。尝试重构您的代码,如下所示
public void Add(string key, object item, int duration)
{
lock(_myStaticLockObject) // Declare static lock object (new Object()) to use for preventing other threads to execute this code.
{
if (DataCacheHelper.DataCache.Get(key) == null)
{
if (duration > 0)
{
DataCacheHelper.DataCache.Add(key, item, new TimeSpan(0, 0, 0, 0, duration));
}
else
{
DataCacheHelper.DataCache.Add(key, item);
}
}
else
{
Update(key, item);
}
}
}
这样,当时只有一个线程会尝试添加一些缓存