Redis
 sql >> Base de données >  >> NoSQL >> Redis

API asynchrones Redis

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);
    }
}