Tous les gestionnaires de clients Redis implémentent à la fois IRedisClientsManager
et IRedisClientsManagerAsync
de sorte que les enregistrements IOC restent les mêmes, ce qui peut continuer à s'enregistrer auprès du IRedisClientsManager
existant interface, par exemple :
container.Register<IRedisClientsManager>(c =>
new RedisManagerPool(redisConnectionString));
Où il peut être utilisé pour résoudre à la fois la synchronisation IRedisClient
et async IRedisClientAsync
clients, par exemple :
using var syncRedis = container.Resolve<IRedisClientsManager>().GetClient();
await using var asyncRedis = await container.Resolve<IRedisClientsManager>().GetClientAsync();
Si vous souhaitez forcer l'utilisation de l'API asynchrone uniquement, vous pouvez choisir de simplement enregistrer IRedisClientsManagerAsync
où il ne vous permet que de résoudre asynchrone uniquement IRedisClientAsync
et ICacheClientAsync
clients, par exemple :
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);
}
}
Utilisation dans ServiceStack #
Dans ServiceStack Services &Controllers, nous vous recommandons d'utiliser GetRedisAsync()
pour résoudre un 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);
}
}