Мне нужно использовать IDistributedCache
в моем приложении, и это может быть MemoryDistributedCache
или RedisCache
в качестве базовой реализации. Насколько я понимаю, они не являются поточно-ориентированными, поэтому я создал свою собственную обертку с использованием ReaderWriterLockSlim
.
ReaderWriterLockSlim
, которая позволяет использовать несколько потоков для чтения или эксклюзивный доступ для записи. И теперь я задаюсь вопросом, является ли это правильным инструментом для работы, и если MemoryDistributedCache
и RedisCache
методы чтения являются поточно-ориентированными.
Что касается общего решения - я понимаю, что требуется время для хранения и чтения значений из распределенный кеш, как Redis. Но у меня нет особого выбора, поскольку значения, которые я храню, еще медленнее получать и обрабатывать.
Вот фрагмент:
...
public async Task<byte[]> GetAsync(string key, CancellationToken token = new CancellationToken())
{
_cacheLock.EnterReadLock();
try
{
return await _cache.GetAsync(GetCacheKey(key), token);
}
finally
{
_cacheLock.ExitReadLock();
}
}
public async Task SetAsync(string key, byte[] value, DistributedCacheEntryOptions options, CancellationToken token = new CancellationToken())
{
_cacheLock.EnterWriteLock();
try
{
await _cache.SetAsync(GetCacheKey(key), value, options, token);
}
finally
{
_cacheLock.ExitWriteLock();
}
}
public async Task RemoveAsync(string key, CancellationToken token = new CancellationToken())
{
_cacheLock.EnterWriteLock();
try
{
await _cache.RemoveAsync(GetCacheKey(key), token);
}
finally
{
_cacheLock.ExitWriteLock();
}
}