MemoryCache缓存 ---缓存时效
MemoryCache缓存 ---缓存时效测试
var cachePool = new MyCachePool();
//Thread.Sleep(1000);
var value = cachePool.GetFileValue();
- /// <summary>
- /// MemoryCache缓存
- /// </summary>
- public class MyCachePool
- {
- ObjectCache cache = MemoryCache.Default;
- const string cacheKey = "TestCacheKey";
- public string GetValue()
- {
- var content = cache[cacheKey] as string;
- if (content == null)
- {
- //Console.WriteLine("Get New Item");
- var policy = new CacheItemPolicy() { AbsoluteExpiration = DateTime.Now.AddSeconds() };
- content = Guid.NewGuid().ToString();
- cache.Set(cacheKey, content, policy);
- }
- else
- {
- Console.WriteLine("Get cached item");
- }
- return content;
- }
- public string GetFileValue()
- {
- string strCacheKey = "FileCacheKey";
- var content = cache[strCacheKey] as string;
- if (content == null)
- {
- //Console.WriteLine("Get New Item");
- //var file = @"E:\test.txt";
- //CacheItemPolicy policy = new CacheItemPolicy();
- //policy.ChangeMonitors.Add(new HostFileChangeMonitor(new List<string> { file }));
- //content = File.ReadAllText(file);
- //cache.Set(strCacheKey, content, policy);
- CacheItemPolicy policy = new CacheItemPolicy();
- policy.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes();
- content = Guid.NewGuid().ToString();
- CacheItem item = new CacheItem("cachedText", content);
- List<string> keys = new List<string> { strCacheKeyChange };
- policy.ChangeMonitors.Add(cache.CreateCacheEntryChangeMonitor(keys)); //依赖某个值变化
- cache.Set(item, policy);
- }
- else
- {
- Console.WriteLine("Get cached item");
- }
- return content;
- }
- }
缓存用起来也就是通过Key来增删改查,内存缓存还可以在config中的配置对内存的使用情况
- /// <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缓存 ---缓存时效的更多相关文章
- 基于MemoryCache的缓存辅助类
背景: 1. 什么是MemoryCache? memoryCache就是用电脑内存做缓存处理 2.使用范围? 可用于不常变的数据,进行保存在内存中,提高处理效率 代码: /// <summary ...
- 在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理(转)
在之前一篇随笔<在.NET项目中使用PostSharp,实现AOP面向切面编程处理>介绍了PostSharp框架的使用,试用PostSharp能给我带来很多便利和优势,减少代码冗余,提高可 ...
- 在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理
在之前一篇随笔<在.NET项目中使用PostSharp,实现AOP面向切面编程处理>介绍了PostSharp框架的使用,试用PostSharp能给我带来很多便利和优势,减少代码冗余,提高可 ...
- .Net Core缓存组件(MemoryCache)【缓存篇(二)】
一.前言 .Net Core缓存源码 1.上篇.NET Core ResponseCache[缓存篇(一)]中我们提到了使用客户端缓存.和服务端缓存.本文我们介绍MemoryCache缓存组件,说到服 ...
- EhCache RMI 分布式缓存/缓存集群
EhCache 系统简介 EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点. EhCache 的主要特性有: 快速.精干 简单: 多种缓存策略: 缓存数据有两级:内存和磁盘, ...
- EhCache 分布式缓存/缓存集群
开发环境: System:Windows JavaEE Server:tomcat5.0.2.8.tomcat6 JavaSDK: jdk6+ IDE:eclipse.MyEclipse 6.6 开发 ...
- EhCache 分布式缓存/缓存集群(转)
开发环境: System:Windows JavaEE Server:tomcat5.0.2.8.tomcat6 JavaSDK: jdk6+ IDE:eclipse.MyEclipse 6.6 开发 ...
- HTTP缓存缓存机制
http协议无状态,所以缓存设定从两方面考虑.客户端浏览器和服务器端. 浏览器端实现过期机制. 服务器端实现验证机制. 缓存机制. 为了减轻服务器负担,也减少网络传输数量.http1.0定义了Expi ...
- Unity3D性能优化小tips——把this.transform缓存缓存起来
Unity3D开发时中有一个小tips,这在官方的文档里其实有提及的,但不那么显眼,这里小说一下: 在MonoBehaviour进行编程时,我们经常会用this.transform, this.gam ...
随机推荐
- 「美团 CodeM 初赛 Round A」最长树链
题目描述 Mr. Walker 最近在研究树,尤其是最长树链问题.现在树中的每个点都有一个值,他想在树中找出最长的链,使得这条链上对应点的值的最大公约数不等于1.请求出这条最长的树链的长度. 输入格式 ...
- 正经学C#_委托
以前不会,甚至连想去学都没想.啧啧啧,我是何等朽木啊. 我先不说其中理念,或者原理,咱就先说最简单的用法.怎么去使用委托. 委托 Delegate 使用委托,就要先定义一个委托.定义一个委托就要先声明 ...
- AB二进制
Description 若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数. 例如: (13)10=(1101)2 ...
- phaser小游戏框架学习中的屏幕适配
这篇博客主要讲一下上一篇博客的右侧和底部出现的问题.就是页面会有偏移量.说一下这个产生的原因吧. 一开始在构建html页面的时候,习惯性的在页面中加了 <meta name="view ...
- 配置IIS使用Python 与常见问题解决
打开IIS管理器 选择功能视图,然后选择ISAPI和CGI限制 打开后,在右侧操作,点击添加,会出现下图所示 按图中提示填写相应部分,在选择路径时,默认可能是dll文件,改成全部文件即可,然后再选择p ...
- iOS 上的相机捕捉 swift
第一台 iPhone 问世就装有相机.在第一个 SKDs 版本中,在 app 里面整合相机的唯一方法就是使用 UIImagePickerController,但到了 iOS 4,发布了更灵活的 AVF ...
- mybatis主键返回语句 使用方法,就是实体类.getid即可拿到返回的id
<insert id="insertSelective" parameterType="com.o2o.Content" useGeneratedKeys ...
- Spring Security获取已登录的用户信息的两种方法
第一种是直接从session中手动拿: @RequestMapping(value = "/user", method = RequestMethod.GET)public Res ...
- 【SSO】单点登录系统
一.单点登录系统介绍 对于一个开发项目来说,每个项目都必不可少要有登录的这个功能.但是随着项目的变大,变大,再变大.系统可能会被拆分成多个小系统,咱们就拿支付宝和淘宝来说,咱们在淘宝上购物,然后就可以 ...
- POJ 3281 Dining ( 最大流 && 建图 )
题意 : 有 N 头牛,John 可以制作 F 种食物和 D 种饮料, 然后接下来有 N 行,每行代表一头牛的喜好==>开头两个数 Fi 和 Di 表示这头牛喜欢 Fi 种食物, Di 种饮料 ...