ABP源码分析十三:缓存Cache实现

ABP中有两种cache的实现方式:MemroyCache 和 RedisCache. 如下图,两者都继承至ICache接口(准确说是CacheBase抽象类)。ABP核心模块封装了MemroyCache 来实现ABP中的默认缓存功能。 Abp.RedisCache这个模块封装RedisCache来实现缓存(通过StackExchange.Redis这个类库访问redis)。

 

 

ICache:缓存的接口。以string类型的key缓存object类型的value.ICache.Get方法有两个参数:

•key:缓存中一个条目的键(字符串类型)。

•工厂:没有找到指定key的缓存条目时调用传入的action来创建cache。工厂方法应该创建并返回实际的条目。如果给定的key在缓存中找到了,那么不会调用该action。

ICache接口也有像GetOrDefault,Set,Remove,Clear的方法。同时,这些方法也有异步(async)版本。

 

ITypedCache/TypedCacheWrapper: 支持泛型key和value的缓存接口与实现,其内部通过封装ICache实例和CacheExtension定义的对ICache的扩展方法来是实现泛型版本的Icache.


另外通过CacheExtension中的方法可以方便的将ICache对象转换为 ITypedCache对象。 ITypeCache是ICache的包装器,提供类型安全、泛型的cache。为了将ICache转为ITypedCache,我们可以使用AsTyped扩展方法.

 

 

CacheExtension: 定义了ICache的扩展方法. 最关键的是如下两个支持泛型的方法:GetOrDefault和GetOrDefaultAsync。如下,内部调用ICache实例的相应方法并通过类型转换。

 

 

AbpCacheNames:定义了四个cachekey常量,这几个cache是供ABP框架使用的

 

ICacheConfigurator/CacheConfigurator:封装了cachename和对该cahce的初始化方法,通过初始化方法可以完成对cache的配置(比如过期时间)。

 

 

ICachingConfiguration/CachingConfiguration: 该接口提供完成cache的配置的方法。具体是通过封装了一个ICacheConfigurator集合,并调用其上面的InitAction来配置cache

 

ICacheManager/CacheManagerBase: 该接口和实现用于生成,配置以及销毁ICache实例。具体是通过ICachingConfiguration对象来初始化cache, 并通过ConcurrentDictionary<string, ICache>来存放和管理cache.

 

ICacheManager.GetCache方法返回一个ICache。第一次请求时会创建缓存,并通过CachingConfiguration中的CacheConfigurator完成对该Cache的配置,以后都是返回相同的缓存对象。因此,我们可以在不同的类(客户端)中共享具有相同名字的相同缓存。

 

AbpMemoryCache:通过CLRMemoryCache来实现Icache.

 

AbpMemoryCacheManager:重写了CacheManagerBaseCreateCacheImplementation方法,该方法用于创建真实的Icache对象。 具体到AbpMemoryCacheManager就是创建AbpMemoryCache

 

AbpRedisCacheManager:重写了CacheManagerBaseCreateCacheImplementation方法,该方法用于创建真实的Icache对象。 具体到AbpRedisCacheManager就是创建AbpRedisCache

IAbpRedisConnectionProvider/AbpRedisConnectionProvider:web.config中读取Redisconnectionstring信息,并通过connectionstring生成ConnectionMultiplexer对象。AbpRedisConnectionProvider是一个单例实现,并且将ConnectionMultiplexer对象保存在其本地的Dictionary中,避免反复创建。

AbpRedisCache:实现了从Redis数据库读取数据的功能。具体则是通过IAbpRedisConnectionProvider对象来访问redis数据库。

 

返回ABP源码分析系列文章目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值