EntLib缓存框架的实现

(一) 缓存架构

caching1

这是官方文档的架构图,图中Cache引用了BackgroundScheduler与实际的有些异议,可以和我自己画的结合起来看。

caching2

客户端通过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()…
原文地址:https://www.cnblogs.com/jackhuclan/p/2158431.html