IDistributedCache с Redis кешем, выполняющим операции atomi c - PullRequest
0 голосов
/ 07 января 2020

. Net Core и IDistributedCache с Redis (https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed?view=aspnetcore-3.1). Как выполнять операции atomi c при использовании IDistributedCache с Redis? Я хочу убедиться, что я не перезаписываю никакие значения в кеше, если много разных пользователей подключаются к двум различным конечным точкам и одновременно запускают команду redisCache.Set ().

1 Ответ

0 голосов
/ 07 января 2020

Я нашел это полезным, и он, кажется, делает то, что я хочу: https://redis.io/topics/distlock, более конкретно: https://github.com/samcook/RedLock.net

Регистрация:

services.AddSingleton<IDistributedLockFactory, RedLockFactory>(x =>
            RedLockFactory.Create(new List<RedLockEndPoint> { new DnsEndPoint(options.Host, options.Port) }));

Использование:

public RedisCache(IDistributedCache cache, IDistributedLockFactory lockFactory)
{
    _cache = cache;
    _lockFactory = lockFactory;
}

public async Task<T> GetOrAddAsync(string key, Func<T> createItem)
{
    ...
    using (var redLock = await _lockFactory.CreateLockAsync(key, _expire, _wait, _retry))
    {
        if (redLock.IsAcquired)
        {
            // do stuff here
            _cache.Set(.....);
        }
    }

    return cacheEntry;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...