.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等)并提供很多高级特性。

https://files.cnblogs.com/files/caolingyi/Caching.zip

原文地址:https://www.cnblogs.com/caolingyi/p/8528786.html