zoukankan      html  css  js  c++  java
  • 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()…
    
  • 相关阅读:
    一文了解网络编程之走进TCP三次握手和HTTP那些你不知道的事
    并发编程面试必备之ConcurrentHashMap源码解析
    java延迟队列DelayQueue及底层优先队列PriorityQueue实现原理源码详解
    聊一聊面试中常问的延时队列
    面试必备HashMap源码解析
    synchronized解锁源码分析
    synchronized的jvm源码加锁流程分析聊锁的意义
    jvm源码解析java对象头
    从ReentrantLock源码入手看锁的实现
    从synchronized和lock区别入手聊聊java锁机制
  • 原文地址:https://www.cnblogs.com/jackhuclan/p/2158431.html
Copyright © 2011-2022 走看看