将数据添加到缓存时复制键
Duplicate keys while adding data to cache
我正在使用以下代码将数据添加到我的缓存中:
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 云服务上 运行。不确定这是否与它有关。
谢谢。
您可以只使用DataCache.Put来添加或替换缓存的对象:
If the object is not present when this method is called, it will be
added to the cache. If the object is already present, it will be
replaced. (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);
}
}
当您使用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);
}
}
}
这样一次只有一个线程会尝试向缓存中添加内容
我正在使用以下代码将数据添加到我的缓存中:
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 云服务上 运行。不确定这是否与它有关。
谢谢。
您可以只使用DataCache.Put来添加或替换缓存的对象:
If the object is not present when this method is called, it will be added to the cache. If the object is already present, it will be replaced. (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);
}
}
当您使用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);
}
}
}
这样一次只有一个线程会尝试向缓存中添加内容