Как обновить кэш для одновременных запросов в ядре Asp.net? - PullRequest
0 голосов
/ 23 декабря 2018

Я использую кеш памяти в ядре 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);
    }
}

Итак, у меня многозапросы и мне нужно это кешировать в памяти.для одновременного запроса я использую объект блокировки, как показано ниже.

Это правильный путь, или я могу использовать лучший способ?

1 Ответ

0 голосов
/ 23 декабря 2018

Класс MemoryCache является поточно-ориентированным (см. - https://github.com/aspnet/Extensions/blob/master/src/Caching/Memory/src/MemoryCache.cs#L23), поэтому вам не нужно блокировать его перед вставкой в ​​кеш.

вставить в кеш так же просто, как это:

_cache.GetOrCreate<Role>(role.Id, entry => entry.Value = role);

, а затем получить значение из кэша будет:

if(_cache.TryGetValue<Role>(id, out var role))
{
    // your code here...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...