MemoryCache缓存
/// <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缓存相关推荐
- 拥抱.NET Core系列:MemoryCache 缓存域
MSCache项目 MSCache 目前最新的正式版是 2.0.0,预览版是2.1.0,会与 .NETCore 2.1 一起发布.本篇用了2.0.0版本 开源在 GitHub 上,仓库地址是:http ...
- 拥抱.NET Core系列:MemoryCache 缓存选项
MSCache项目 MSCache 目前最新的正式版是 2.0.0,预览版是2.1.0,会与 .NETCore 2.1 一起发布.本篇用了2.0.0版本 开源在 GitHub 上,仓库地址是:http ...
- 拥抱.NET Core系列:MemoryCache 缓存过期
MSCache项目 MSCache目前最新的正式版是 2.0.0,预览版是2.1.0,会与.NETCore 2.1一起发布.本篇用了2.0.0版本 开源在GitHub上,仓库地址是:https://g ...
- ABP入门系列(13)——Redis缓存用起来
1. 引言 创建任务时我们需要指定分配给谁,Demo中我们使用一个下拉列表用来显示当前系统的所有用户,以供用户选择.我们每创建一个任务时都要去数据库取一次用户列表,然后绑定到用户下拉列表显示.如果就单 ...
- 开源推荐:.Net Core3.1 + EF Core + LayUI 封装的MVC版后台管理系统
ASP.NET Core是一个由微软创建的,用于构建Web应用程序,API,微服务的Web框架.它使用常见的模式,例如MVC(模型-视图-控制器),依赖注入,和一个由中间件构成它基于Apache 2. ...
- .NET Core 学习资料精选:进阶
2019.09月就要正式发布.NET 3.0了,对于前一篇博文<.NET Core 学习资料精选:入门>大家学的可还开心?这是本系列的第二篇文章:进阶篇,喜欢的园友速度学起来啊. 对于还在 ...
- 【学习笔记】Mybatis框架学习及个人感悟
文章目录 一.简介 1.1.什么是Mybatis 1.2.持久化 1.3.为什么需要Mybatis 二.第一个Mybatis程序 2.1.搭建环境 2.2.创建一个子模块 2.3.编写代码 2.4.测 ...
- vs和mysql做管理系统_FytSoaCms0: CMS内容管理系统
使用NetCore2.1开发, Vs2017 数据Mysql...
2018-12-22更新 增加MemoryCache缓存和RedisCache缓存 CoreSDK升级到2.2 增加前台网站示例--演示地址:点击查看 2018-12-15更新 媒体资源库增加本地管理 ...
- 基于.Net Core 快速开发框架
NetCore 介绍 1.该项目采用了 IOC DI DDD OOP AOP SOA 设计模式 以及autofac Log4net Signalr EF 等主流中间件进行开发 2.数据层支持ado.n ...
最新文章
- 用什么服务器开发小程序,开发小程序用什么服务器系统
- Spring Context 你真的懂了吗?
- 心得丨在人工智能领域, 开发人员需要什么技能?
- bootstrap自动生成html,Bootstrap框架动态生成Web页面文章内目录的方法
- 【PAT乙级】1066 图像过滤 (15 分)
- 6.1团队第二阶段冲刺(七)
- java爬取button_学习使用Java的webmagic框架爬取网页内容
- linux 下wine 和plyaonlinux 安装以及卸载 (linux下运行windows软件的神器)
- 计算机专业871,北科大计算机871经验帖
- android消息机制 Message, Looper,Handler
- 边拍照边显示弹幕 小米公开拍摄相关专利
- C++ 中的深入浅拷贝和深拷贝
- IDEA Mybatis 找不到映射器xml文件
- mysql安装包如何使用_关于MySQL安装包如何使用的详细介绍
- 微软高性能缓存AppFabric (一) 安装
- 魔兽争霸3地图加密,支持重制版-魔兽争霸3地图加密实操,魔兽地图加密工具
- 费马小定理和欧拉定理
- P1095 [NOIP2007 普及组] 守望者的逃离
- 简单JAVA版本淘宝客程序上线
- js神秘的电报密码---哈弗曼编码
热门文章
- php短网址程序,博天短网址生成程序 PHP源码
- 自用的一些平时记录. 时不时更新
- otg烧写linux内核,Linux——OTG方式烧写镜像文件步骤总结
- MII与RMII接口的区别
- 单点登录与第三方登录 + CSRF-XSS-DNS-DDOS-SQL攻击
- CSS 属性 columns
- 微信小程序 报错一大串 define is not defined
- 双向链表 建立和插入
- Csharp日常笔记
- 论文笔记:m6Acorr: an online tool for the correction and comparison of m6A methylation profiles