Asp.net mvc 如何在Asp.net核心中将缓存更新为并发请求?

Asp.net mvc 如何在Asp.net核心中将缓存更新为并发请求?,asp.net-mvc,caching,asp.net-core,Asp.net Mvc,Caching,Asp.net Core,我在Asp.net内核中使用内存缓存,并使用自定义业务。我需要角色列表和内存中角色的相关数据 我对内存中的缓存角色使用以下方法: public void Add(Role role) { lock (_lockObject) { var dictionary = _cache.Get<Dictionary<string, List<RoleViewModel>>>(CacheKeys.RoleCache); i

我在Asp.net内核中使用内存缓存,并使用自定义业务。我需要角色列表和内存中角色的相关数据

我对内存中的缓存角色使用以下方法:

public void Add(Role role)
{
    lock (_lockObject)
    {
        var dictionary = _cache.Get<Dictionary<string, List<RoleViewModel>>>(CacheKeys.RoleCache);

        if (dictionary.ContainsKey(role.Id))
        {
            dictionary[role.tId].Add(new RoleCacheViewModel(role));
        }
        else
        {
            dictionary.Add(
                role.Id,
                new List<RoleCacheViewModel> { new RoleCacheViewModel(role) });
        }

        _cache.Set(CacheKeys.RoleCache, dictionary);
    }
}
公共作废添加(角色)
{
锁定(锁定对象)
{
var dictionary=\u cache.Get(CacheKeys.RoleCache);
if(dictionary.ContainsKey(role.Id))
{
字典[role.tId].Add(新RoleCacheViewModel(role));
}
其他的
{
字典。添加(
角色Id,
新列表{new RoleCacheViewModel(角色)};
}
_cache.Set(CacheKeys.RoleCache,dictionary);
}
}
所以,我有很多请求,我需要它缓存在内存中。对于并发请求,我使用如下所示的lock对象


这是正确的方法还是我可以使用更好的方法?

MemoryCache类是线程安全的(请参见-),因此在插入缓存之前不需要锁定

插入缓存非常简单,如下所示:

_cache.GetOrCreate<Role>(role.Id, entry => entry.Value = role);
\u cache.GetOrCreate(role.Id,entry=>entry.Value=role);
然后从缓存中获取值将是:

if(_cache.TryGetValue<Role>(id, out var role))
{
    // your code here...
}
if(_cache.TryGetValue(id,out var角色))
{
//你的代码在这里。。。
}

OP中的问题是,他将字典存储到缓存中,而不是角色的单个值。