/// <summary>
/// 从内存缓存中读取配置。若缓存中不存在,则重新从文件(或数据库)中读取配置,存入缓存
/// </summary>
/// <param name="cacheKey">缓存Key</param>
/// <returns>配置词典</returns>
private static Dictionary<string, string> GetConfigDictionary(string cacheKey)
{
    Dictionary<string, string> configs = null;

//1、获取内存缓存对象
    ObjectCache cache = MemoryCache.Default;
    
    //2、通过Key判断缓存中是否已有词典内容(Key在存入缓存时设置)
    if (cache.Contains(cacheKey))
    {
        //3、直接从缓存中读取词典内容
        configs = cache.GetCacheItem(cacheKey).Value as Dictionary<string, string>;
    }
    else
    {
        //3、读取配置文件,组成词典对象,准备放到缓存中
        configs = GetFromXml();
        
        //4、检查是否读取到配置内容
        if (configs != null)
        {
            //4、新建一个CacheItemPolicy对象,该对象用于声明配置对象在缓存中的处理策略
            CacheItemPolicy policy = new CacheItemPolicy();
            
            //5、因为配置文件一直需要读取,所以在此设置缓存优先级为不应删除
            // 实际情况请酌情考虑,同时可以设置AbsoluteExpiration属性指定过期时间
            policy.Priority = CacheItemPriority.NotRemovable;

//6、将词典内容添加到缓存,传入 缓存Key、配置对象、对象策略
            // Set方法首先会检查Key是否在缓存中存在,如果存在,更新value,不存在则创建新的
            // 这里先加入缓存再加监视的原因是:在缓存加入时,也会触发监视事件,会导致出错。
            cache.Set(cacheKey, configs, policy);

//7、监视文件需要传入一个IList对象,所以即便只有一个文件也需要新建List对象
            List<string> filePaths = new List<string>() { "c:\config.xml" };

//8、新建一个文件监视器对象,添加对资源文件的监视
            HostFileChangeMonitor monitor = new HostFileChangeMonitor(filePaths);
            
            //9、调用监视器的NotifyOnChanged方法传入发生改变时的回调方法
            monitor.NotifyOnChanged(new OnChangedCallback((o) =>
                    { 
                        cache.Remove(cacheKey);
                    }
                ));
                
            //10、为配置对象的缓存策略加入监视器
            policy.ChangeMonitors.Add(monitor);
        }
    }
    return configs;
}

MemoryCache缓存相关推荐

  1. 拥抱.NET Core系列:MemoryCache 缓存域

    MSCache项目 MSCache 目前最新的正式版是 2.0.0,预览版是2.1.0,会与 .NETCore 2.1 一起发布.本篇用了2.0.0版本 开源在 GitHub 上,仓库地址是:http ...

  2. 拥抱.NET Core系列:MemoryCache 缓存选项

    MSCache项目 MSCache 目前最新的正式版是 2.0.0,预览版是2.1.0,会与 .NETCore 2.1 一起发布.本篇用了2.0.0版本 开源在 GitHub 上,仓库地址是:http ...

  3. 拥抱.NET Core系列:MemoryCache 缓存过期

    MSCache项目 MSCache目前最新的正式版是 2.0.0,预览版是2.1.0,会与.NETCore 2.1一起发布.本篇用了2.0.0版本 开源在GitHub上,仓库地址是:https://g ...

  4. ABP入门系列(13)——Redis缓存用起来

    1. 引言 创建任务时我们需要指定分配给谁,Demo中我们使用一个下拉列表用来显示当前系统的所有用户,以供用户选择.我们每创建一个任务时都要去数据库取一次用户列表,然后绑定到用户下拉列表显示.如果就单 ...

  5. 开源推荐:.Net Core3.1 + EF Core + LayUI 封装的MVC版后台管理系统

    ASP.NET Core是一个由微软创建的,用于构建Web应用程序,API,微服务的Web框架.它使用常见的模式,例如MVC(模型-视图-控制器),依赖注入,和一个由中间件构成它基于Apache 2. ...

  6. .NET Core 学习资料精选:进阶

    2019.09月就要正式发布.NET 3.0了,对于前一篇博文<.NET Core 学习资料精选:入门>大家学的可还开心?这是本系列的第二篇文章:进阶篇,喜欢的园友速度学起来啊. 对于还在 ...

  7. 【学习笔记】Mybatis框架学习及个人感悟

    文章目录 一.简介 1.1.什么是Mybatis 1.2.持久化 1.3.为什么需要Mybatis 二.第一个Mybatis程序 2.1.搭建环境 2.2.创建一个子模块 2.3.编写代码 2.4.测 ...

  8. vs和mysql做管理系统_FytSoaCms0: CMS内容管理系统 使用NetCore2.1开发, Vs2017 数据Mysql...

    2018-12-22更新 增加MemoryCache缓存和RedisCache缓存 CoreSDK升级到2.2 增加前台网站示例--演示地址:点击查看 2018-12-15更新 媒体资源库增加本地管理 ...

  9. 基于.Net Core 快速开发框架

    NetCore 介绍 1.该项目采用了 IOC DI DDD OOP AOP SOA 设计模式 以及autofac Log4net Signalr EF 等主流中间件进行开发 2.数据层支持ado.n ...

最新文章

  1. 用什么服务器开发小程序,开发小程序用什么服务器系统
  2. Spring Context 你真的懂了吗?
  3. 心得丨在人工智能领域, 开发人员需要什么技能?
  4. bootstrap自动生成html,Bootstrap框架动态生成Web页面文章内目录的方法
  5. 【PAT乙级】1066 图像过滤 (15 分)
  6. 6.1团队第二阶段冲刺(七)
  7. java爬取button_学习使用Java的webmagic框架爬取网页内容
  8. linux 下wine 和plyaonlinux 安装以及卸载 (linux下运行windows软件的神器)
  9. 计算机专业871,北科大计算机871经验帖
  10. android消息机制 Message, Looper,Handler
  11. 边拍照边显示弹幕 小米公开拍摄相关专利
  12. C++ 中的深入浅拷贝和深拷贝
  13. IDEA Mybatis 找不到映射器xml文件
  14. mysql安装包如何使用_关于MySQL安装包如何使用的详细介绍
  15. 微软高性能缓存AppFabric (一) 安装
  16. 魔兽争霸3地图加密,支持重制版-魔兽争霸3地图加密实操,魔兽地图加密工具
  17. 费马小定理和欧拉定理
  18. P1095 [NOIP2007 普及组] 守望者的逃离
  19. 简单JAVA版本淘宝客程序上线
  20. js神秘的电报密码---哈弗曼编码

热门文章

  1. php短网址程序,博天短网址生成程序 PHP源码
  2. 自用的一些平时记录. 时不时更新
  3. otg烧写linux内核,Linux——OTG方式烧写镜像文件步骤总结
  4. MII与RMII接口的区别
  5. 单点登录与第三方登录 + CSRF-XSS-DNS-DDOS-SQL攻击
  6. CSS 属性 columns
  7. 微信小程序 报错一大串 define is not defined
  8. 双向链表 建立和插入
  9. Csharp日常笔记
  10. 论文笔记:m6Acorr: an online tool for the correction and comparison of m6A methylation profiles