zoukankan      html  css  js  c++  java
  • .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

  • 相关阅读:
    Jmeter 常用函数(20)- 详解 __counter
    Jmeter 常用函数(19)- 详解 __BeanShell
    Python 简明教程 --- 26,Python 多进程编程
    Python 简明教程 --- 25,Python 目录操作
    Python 简明教程 --- 24,Python 文件读写
    Zookeeper分布式过程协同技术
    设计模式之命令模式案例详解
    设计模式之模板方法模式
    设计模式之代理模式案例详解
    设计模式之享元模式
  • 原文地址:https://www.cnblogs.com/caolingyi/p/8528786.html
Copyright © 2011-2022 走看看