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