.NET 4.0 缓存
参考:
https://www.cnblogs.com/wuhuacong/p/6518748.html
https://www.cnblogs.com/RainbowInTheSky/p/5557936.html
https://www.cnblogs.com/TianFang/p/3430169.html
http://www.cnblogs.com/wuhuacong/p/5889305.html
.NET 4.0的缓存功能主要由三部分组成:System.Runtime.Caching,System.Web.Caching.Cache和Output Cache。
System.Runtime.Caching这是在.NET 4.0中新增的缓存框架,主要是使用MemoryCache对象,该对象存在于程序集System.Runtime.Caching.dll。
System.Web.Caching.Cache这个则是在.NET2.0开始就一直存在的缓存对象,一般主要用在Web中,当然也可以用于Winform里面,不过要引用System.Web.dll。
Output Cache则是Asp.NET里面使用的,在ASP.NET 4.0之前的版本都是直接使用System.Web.Caching.Cache来缓存HTML片段。在ASP.NET 4.0中对它进行了重新设计,提供了一个OutputCacheProvider供开发人员进行扩展,但是它默认情况下,仍然使用System.Web.Caching.Cache来做做缓存
一、System.Runtime.Caching
一个Cache框架主要包括三个部分:ObjectCache、CacheItemPolicy、ChangeMonitor。
-
ObjectCache表示一个CachePool,它提供了Cache对象的添加、获取、更新等接口,是Cache框架的主体。它是一个抽象类,并且系统给了一个常用的实现——MemoryCache。
-
CacheItemPolicy则表示Cache过期策略,例如保存一定时间后过期。它也经常和ChangeMonitor一起使用,以实现更复杂的策略。
-
ChangeMonitor则主要负责CachePool对象的状态维护,判断对象是否需要更新。它也是一个抽象类,系统也提供了几个常见的实现:CacheEntryChangeMonitor、FileChangeMonitor、HostFileChangeMonitor、SqlChangeMonitor。
1、简单使用(HostFileChangeMonitor)
public static class CacheHelper { public static MenuStore GetMenuConfig(string cacheKey, string path) { MenuStore _Menu = new MenuStore(); //1、获取内存缓存对象 ObjectCache cache = MemoryCache.Default; //2、通过Key判断缓存中是否已有词典内容(Key在存入缓存时设置) if (cache.Contains(cacheKey)) { //3、直接从缓存中读取词典内容 _Menu = cache.GetCacheItem(cacheKey).Value as MenuStore; } else { _Menu = (MenuStore)RRTools3.Utility.Serialization.XmlDeserialize( File.ReadAllText(path), typeof(MenuStore)); if (_Menu != null) { CacheItemPolicy policy = new CacheItemPolicy(); policy.Priority = CacheItemPriority.NotRemovable; cache.Set(cacheKey, _Menu, policy); //7、监视文件需要传入一个IList对象,所以即便只有一个文件也需要新建List对象 List<string> filePaths = new List<string>() { path }; //8、新建一个文件监视器对象,添加对资源文件的监视 HostFileChangeMonitor monitor = new HostFileChangeMonitor(filePaths); //9、调用监视器的NotifyOnChanged方法传入发生改变时的回调方法 monitor.NotifyOnChanged(new OnChangedCallback((o) => { cache.Remove(cacheKey); } )); //10、为配置对象的缓存策略加入监视器 policy.ChangeMonitors.Add(monitor); } } return _Menu; } }
2、CacheManager
CacheManager是一个以C#语言开发的开源.Net缓存框架抽象层。它不是具体的缓存实现,但它支持多种缓存提供者(如Redis、Memcached等)并提供很多高级特性。