Tất cả người quản lý khách hàng của Redis đều triển khai cả IRedisClientsManager và IRedisClientsManagerAsync vì vậy, đăng ký IOC vẫn giữ nguyên có thể tiếp tục đăng ký với IRedisClientsManager hiện có giao diện, ví dụ:
container.Register<IRedisClientsManager>(c =>
new RedisManagerPool(redisConnectionString));
Nơi nó có thể được sử dụng để giải quyết cả đồng bộ hóa IRedisClient và async IRedisClientAsync khách hàng, ví dụ:
using var syncRedis = container.Resolve<IRedisClientsManager>().GetClient();
await using var asyncRedis = await container.Resolve<IRedisClientsManager>().GetClientAsync();
Nếu bạn muốn buộc sử dụng API không đồng bộ, có thể chọn chỉ đăng ký IRedisClientsManagerAsync nơi nó chỉ cho phép bạn giải quyết không đồng bộ chỉ IRedisClientAsync và ICacheClientAsync khách hàng, ví dụ:
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);
}
}
Cách sử dụng trong ServiceStack #
Bên trong Dịch vụ &Bộ điều khiển ServiceStack, chúng tôi khuyên bạn nên sử dụng GetRedisAsync() để giải quyết một 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);
}
}