将数据添加到缓存时重复键

时间:2016-01-11 16:07:17

标签: c# .net azure caching azure-cloud-services

我正在使用以下代码将数据添加到我的缓存中:

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'语句。

仍然使用此代码我仍然收到以下错误: enter image description here

有谁知道我在这一切中缺少什么?

该程序在具有2个实例的Azure云服务上运行。不确定这与它有什么关系。

感谢。

2 个答案:

答案 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);
        }
    }
}

这样,当时只有一个线程会尝试添加一些缓存