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()…
    
  • 相关阅读:
    jieba的使用
    如何用python查看自己的电脑有几个核
    NLTK实现文本切分
    nltk的安装和简单使用
    初识NLP 自然语言处理
    mysql 查询存在A表中而不存在B表中的数据
    mysql 导出数据报错: row must be in range 0-65535
    python3 re模块正则匹配字符串中的时间信息
    Python语法速查: 14. 测试与调优
    Python语法速查: 20. 线程与并发
  • 原文地址:https://www.cnblogs.com/jackhuclan/p/2158431.html
Copyright © 2011-2022 走看看