-
Notifications
You must be signed in to change notification settings - Fork 322
缓存工厂
Catcher Wong edited this page Oct 6, 2019
·
1 revision
在EasyCaching中,所有不同类型的provider都是通过下面三个接口来进行操作的。
- IEasyCachingProvider
- IRedisCachingProvider
- IHybridCachingProvider
缓存工厂最主要的目的是解决多实例的问题。多实例可以理解成,在一个项目中,用到了多个不同的provider,如,一个InMemory一个CSRedis,三个InMemory,两个InMemory两个CSRedis 等。
目前EasyCaching提供了两个工厂去创建这三类provider
- IEasyCachingProviderFactory (可以创建IEasyCachingProvider和IRedisCachingProvider)
- IHybridProviderFactory (可以创建IHybridCachingProvider,v0.8.0版本之后)
工厂创建对应的provider都是通过名字来区分的,并且这个名字必须是唯一的!
名字是在注册到容器的时候指定的。
services.AddEasyCaching(option =>
{
// 添加一个名为m1的caching provider
option.UseInMemory("m1");
// 添加一个名为m2的caching provider
option.UseInMemory("m2");
// 添加一个名为redis1的caching provider和一个名为redis1的redis provider
option.UseRedis(config =>
{
config.DBConfig.Endpoints.Add(new ServerEndPoint("127.0.0.1", 6379));
}, "redis1");
// 添加一个名为redis2的caching provider和一个名为redis2的redis provider
option.UseRedis(config =>
{
config.DBConfig.Endpoints.Add(new ServerEndPoint("127.0.0.1", 6380));
}, "redis2");
// 添加一个名为h1的hybrid provider
option.UseHybrid(config =>
{
config.EnableLogging = false;
config.TopicName = "test_topic1";
config.LocalCacheProviderName = "m1";
config.DistributedCacheProviderName = "redis1";
}, "h1");
// 添加一个名为h2的hybrid provider
option.UseHybrid(config =>
{
config.EnableLogging = false;
config.TopicName = "test_topic2";
config.LocalCacheProviderName = "m2";
config.DistributedCacheProviderName = "redis2";
}, "h2");
});
public class FactoryController : Controller
{
private readonly IEasyCachingProvider _provider1;
private readonly IRedisCachingProvider _redis1;
private readonly IHybridCachingProvider _hybrid1;
public FactoryController(
IEasyCachingProviderFactory cFactory
, IHybridProviderFactory hFactory
)
{
this._provider1 = cFactory.GetCachingProvider("p1");
this._redis1 = cFactory.GetRedisProvider("r1");
this._hybrid1 = hFactory.GetHybridCachingProvider("h1");
}
// ...
}