EntLib缓存框架的实现
(一) 缓存架构
这是官方文档的架构图,图中Cache引用了BackgroundScheduler与实际的有些异议,可以和我自己画的结合起来看。
客户端通过CacheManagerFactory获取配置文件所配置的CacheManager,CacheManager中引用了3个对象,Cache,ExpirationPollTimer,BackgroundScheduler,
Ø Cache是真正的缓存类,用于缓存项目的Add,Remove,并通过IBackingStore获取数据GetData,和保存数据Flush。Cache中保存的是CacheItem,CacheItem引用了ICacheItemExpition和ICahceItemRefreshAction,ICacheItemExpition用于缓存项目的过期策略,是否过期,过期时间等。ICahceItemRefreshAction用户缓存项目的刷新。
Ø CacheManager引用的ExpirationPollTimer通过一个Timer调用回调方法,调用BackgroundScheduler中的ExpirationTask的DoExpirations查找过期项,移除过期项
Ø ExpirationTask和ScavengerTask都引用了ICacheOperations,ICacheOperations用于缓存项目过期后缓存项目的操作,ScavengerTask用于标识缓存项目是否需要获取
(二) 缓存配置
<configuration> <configSections> <section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings,Microsoft.Practices.EnterpriseLibrary.Caching" /> </configSections> <cachingConfiguration defaultCacheManager="Default Cache Manager"> <backingStores> <add name="inMemory" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching" /> </backingStores> <cacheManagers> <add name="Default Cache Manager" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching" expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="1000" numberToRemoveWhenScavenging="10" backingStoreName="inMemory" /> <add name="Loading Scenario Cache Manager" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching" expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="1000" numberToRemoveWhenScavenging="10" backingStoreName="inMemory" /> </cacheManagers> </cachingConfiguration> </configuration>
(三) 缓存使用
//获取默认的缓存配置
ICacheManager primitivesCache; primitivesCache = CacheFactory.GetCacheManager(); cache.Add()… cache.Remove()…
或者获取指定的缓存配置
readonly ICacheManager cache; cache = CacheFactory.GetCacheManager("Loading Scenario Cache Manager"); cache.Add()… cache.Remove()…
作者:Jackhuclan
出处:http://jackhuclan.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://jackhuclan.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。