码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2016-03-28 13:37:52      阅读:603      评论:0      收藏:0      [点我收藏+]

标签:

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: 支持泛型keyvalue的缓存接口与实现,其内部通过封装ICache对象实现。通过CacheExtension中的方法可以方便的将ICache对象转换为 ITypedCache对象。

ITypeCache是ICache的包装器,提供类型安全、泛型的cache。为了将ICache转为ITypedCache,我们可以使用AsTyped扩展方法

技术分享

 

 

CacheExtension,封装了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。第一次请求时会创建缓存,以后都是返回相同的缓存对象。因此,我们可以在不同的类(客户端)中共享具有相同名字的相同缓存。

技术分享

 

AbpMemoryCache:通过CLRMemoryCache来实现Icache.

技术分享

 

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

技术分享

 

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

标签:

原文地址:http://www.cnblogs.com/1zhk/p/5328547.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!