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

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

这样一次只有一个线程会尝试向缓存中添加内容