Todos os gerentes de cliente Redis implementam
IRedisClientsManager
e IRedisClientsManagerAsync
para que os registros do IOC permaneçam os mesmos, o que pode continuar a ser registrado no IRedisClientsManager
existente interface, por exemplo:container.Register<IRedisClientsManager>(c =>
new RedisManagerPool(redisConnectionString));
Onde pode ser usado para resolver a sincronização
IRedisClient
e assíncrono IRedisClientAsync
clientes, por exemplo:using var syncRedis = container.Resolve<IRedisClientsManager>().GetClient();
await using var asyncRedis = await container.Resolve<IRedisClientsManager>().GetClientAsync();
Se você deseja forçar o uso da API somente assíncrona, pode optar por apenas registrar
IRedisClientsManagerAsync
onde ele só permite que você resolva apenas assíncronas IRedisClientAsync
e ICacheClientAsync
clientes, por exemplo: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);
}
}
Uso no ServiceStack #
Dentro dos Serviços e Controladores do ServiceStack, recomendamos o uso de
GetRedisAsync()
para resolver um 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);
}
}