Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Asynchroniczne interfejsy API Redis

Wszyscy menedżerowie klienta Redis implementują zarówno IRedisClientsManager i IRedisClientsManagerAsync więc rejestracje IOC pozostają takie same, co może nadal rejestrować się w istniejącym IRedisClientsManager interfejs, np.:

container.Register<IRedisClientsManager>(c => 
    new RedisManagerPool(redisConnectionString));

Gdzie można go użyć do rozwiązania obu synchronizacji IRedisClient i async IRedisClientAsync klientów, np.:

using var syncRedis = container.Resolve<IRedisClientsManager>().GetClient();
await using var asyncRedis = await container.Resolve<IRedisClientsManager>().GetClientAsync();

Jeśli chcesz wymusić użycie API tylko w trybie asynchronicznym, możesz po prostu zarejestrować IRedisClientsManagerAsync gdzie pozwala tylko rozwiązać tylko async IRedisClientAsync i ICacheClientAsync klientów, np.:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IRedisClientsManagerAsync>(c => new RedisManagerPool());
}

//... 

public class MyDep
{
    private IRedisClientsManagerAsync manager;
    public MyDep(IRedisClientsManagerAsync manager) => this.manager = manager;

    public async Task<long> Incr(string key, uint value)
    {
        await using var redis = await manager.GetClientAsync();
        return await redis.IncrementAsync(key, value);
    }
}

Użycie w ServiceStack #

W usługach i kontrolerach ServiceStack zalecamy użycie GetRedisAsync() rozwiązać IRedisClientAsync :

public class MyService : Service
{
    public async Task<object> Any(MyRequest request)
    {
        await using var redis = await GetRedisAsync();
        await redis.IncrementAsync(nameof(MyRequest), 1);
    }
}

public class HomeController : ServiceStackController
{
    public async Task<ActionResult> Index()
    {
        await using var redis = await GetRedisAsync();
        await redis.IncrementAsync(nameof(HomeController), 1);
    }
}

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak zaimplementować transakcję z wycofaniem w Redis

  2. Zachowanie Redis z wieloma współbieżnymi programami wykonującymi odczyt/del na tym samym klawiszu skrótu

  3. Redis nie może się połączyć w zajętym obciążeniu

  4. Jak wdrożyć resque workerów do produkcji?

  5. JedisPoolConfig nie można przypisać do GenericObjectPoolConfig