सभी रेडिस क्लाइंट मैनेजर IRedisClientsManager
both दोनों को लागू करते हैं और IRedisClientsManagerAsync
इसलिए IOC पंजीकरण वही रहता है जो मौजूदा IRedisClientsManager
के विरुद्ध पंजीकरण करना जारी रख सकता है इंटरफ़ेस, उदा:
container.Register<IRedisClientsManager>(c =>
new RedisManagerPool(redisConnectionString));
जहां इसका उपयोग दोनों सिंक IRedisClient
. को हल करने के लिए किया जा सकता है और async IRedisClientAsync
क्लाइंट, उदा:
using var syncRedis = container.Resolve<IRedisClientsManager>().GetClient();
await using var asyncRedis = await container.Resolve<IRedisClientsManager>().GetClientAsync();
यदि आप केवल async-केवल API उपयोग को बाध्य करना चाहते हैं, तो आप केवल IRedisClientsManagerAsync
को पंजीकृत करना चुन सकते हैं। जहां यह आपको केवल async को हल करने देता है IRedisClientAsync
और ICacheClientAsync
क्लाइंट, उदा:
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);
}
}
सर्विसस्टैक में उपयोग #
सर्विसस्टैक सेवाओं और नियंत्रकों के अंदर हम GetRedisAsync()
. का उपयोग करने की सलाह देते हैं 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);
}
}