MemoryCache缓存 ---缓存时效测试

var cachePool = new MyCachePool();
//Thread.Sleep(1000);
var value = cachePool.GetFileValue();

  1. /// <summary>
  2. /// MemoryCache缓存
  3. /// </summary>
  4. public class MyCachePool
  5. {
  6. ObjectCache cache = MemoryCache.Default;
  7. const string cacheKey = "TestCacheKey";
  8. public string GetValue()
  9. {
  10. var content = cache[cacheKey] as string;
  11. if (content == null)
  12. {
  13. //Console.WriteLine("Get New Item");
  14.  
  15. var policy = new CacheItemPolicy() { AbsoluteExpiration = DateTime.Now.AddSeconds() };
  16. content = Guid.NewGuid().ToString();
  17. cache.Set(cacheKey, content, policy);
  18. }
  19. else
  20. {
  21. Console.WriteLine("Get cached item");
  22. }
  23.  
  24. return content;
  25. }
  26. public string GetFileValue()
  27. {
  28. string strCacheKey = "FileCacheKey";
  29. var content = cache[strCacheKey] as string;
  30. if (content == null)
  31. {
  32. //Console.WriteLine("Get New Item");
  33.  
  34. //var file = @"E:\test.txt";
  35. //CacheItemPolicy policy = new CacheItemPolicy();
  36. //policy.ChangeMonitors.Add(new HostFileChangeMonitor(new List<string> { file }));
  37.  
  38. //content = File.ReadAllText(file);
  39. //cache.Set(strCacheKey, content, policy);
  40.  
  41. CacheItemPolicy policy = new CacheItemPolicy();
  42. policy.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes();
  43.  
  44. content = Guid.NewGuid().ToString();
  45.  
  46. CacheItem item = new CacheItem("cachedText", content);
  47.  
  48. List<string> keys = new List<string> { strCacheKeyChange };
  49.  
  50. policy.ChangeMonitors.Add(cache.CreateCacheEntryChangeMonitor(keys)); //依赖某个值变化
  51.  
  52. cache.Set(item, policy);
  53. }
  54. else
  55. {
  56. Console.WriteLine("Get cached item");
  57. }
  58.  
  59. return content;
  60. }
  61. }

缓存用起来也就是通过Key来增删改查,内存缓存还可以在config中的配置对内存的使用情况

  1. /// <summary>
  2. /// 从内存缓存中读取配置。若缓存中不存在,则重新从文件中读取配置,存入缓存
  3. /// </summary>
  4. /// <param name="cacheKey">缓存Key</param>
  5. /// <returns>配置词典</returns>
  6. private static Dictionary<string, string> GetConfigDictionary(string cacheKey)
  7. {
  8. Dictionary<string, string> configs = null;
  9.  
  10. //1、获取内存缓存对象
  11. ObjectCache cache = MemoryCache.Default;
  12.  
  13. //2、通过Key判断缓存中是否已有词典内容(Key在存入缓存时设置)
  14. if (cache.Contains(cacheKey))
  15. {
  16. //3、直接从缓存中读取词典内容
  17. configs = cache.GetCacheItem(cacheKey).Value as Dictionary<string, string>;
  18. }
  19. else
  20. {
  21. //3、读取配置文件,组成词典对象,准备放到缓存中
  22. configs = GetFromXml();
  23.  
  24. //4、检查是否读取到配置内容
  25. if (configs != null)
  26. {
  27. //4、新建一个CacheItemPolicy对象,该对象用于声明配置对象在缓存中的处理策略
  28. CacheItemPolicy policy = new CacheItemPolicy();
  29.  
  30. //5、因为配置文件一直需要读取,所以在此设置缓存优先级为不应删除
  31. // 实际情况请酌情考虑,同时可以设置AbsoluteExpiration属性指定过期时间
  32. policy.Priority = CacheItemPriority.NotRemovable;
  33.  
  34. //6、将词典内容添加到缓存,传入 缓存Key、配置对象、对象策略
  35. // Set方法首先会检查Key是否在缓存中存在,如果存在,更新value,不存在则创建新的
  36. // 这里先加入缓存再加监视的原因是:在缓存加入时,也会触发监视事件,会导致出错。
  37. cache.Set(cacheKey, configs, policy);
  38.  
  39. //7、监视文件需要传入一个IList对象,所以即便只有一个文件也需要新建List对象
  40. List<string> filePaths = new List<string>() { "c:\config.xml" };
  41.  
  42. //8、新建一个文件监视器对象,添加对资源文件的监视
  43. HostFileChangeMonitor monitor = new HostFileChangeMonitor(filePaths);
  44.  
  45. //9、调用监视器的NotifyOnChanged方法传入发生改变时的回调方法
  46. monitor.NotifyOnChanged(new OnChangedCallback((o) =>
  47. {
  48. cache.Remove(cacheKey);
  49. }
  50. ));
  51.  
  52. //10、为配置对象的缓存策略加入监视器
  53. policy.ChangeMonitors.Add(monitor);
  54. }
  55. }
  56. return configs;
  57. }

MemoryCache缓存 ---缓存时效的更多相关文章

  1. 基于MemoryCache的缓存辅助类

    背景: 1. 什么是MemoryCache? memoryCache就是用电脑内存做缓存处理 2.使用范围? 可用于不常变的数据,进行保存在内存中,提高处理效率 代码: /// <summary ...

  2. 在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理(转)

    在之前一篇随笔<在.NET项目中使用PostSharp,实现AOP面向切面编程处理>介绍了PostSharp框架的使用,试用PostSharp能给我带来很多便利和优势,减少代码冗余,提高可 ...

  3. 在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理

    在之前一篇随笔<在.NET项目中使用PostSharp,实现AOP面向切面编程处理>介绍了PostSharp框架的使用,试用PostSharp能给我带来很多便利和优势,减少代码冗余,提高可 ...

  4. .Net Core缓存组件(MemoryCache)【缓存篇(二)】

    一.前言 .Net Core缓存源码 1.上篇.NET Core ResponseCache[缓存篇(一)]中我们提到了使用客户端缓存.和服务端缓存.本文我们介绍MemoryCache缓存组件,说到服 ...

  5. EhCache RMI 分布式缓存/缓存集群

    EhCache 系统简介 EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点. EhCache 的主要特性有: 快速.精干 简单: 多种缓存策略: 缓存数据有两级:内存和磁盘, ...

  6. EhCache 分布式缓存/缓存集群

    开发环境: System:Windows JavaEE Server:tomcat5.0.2.8.tomcat6 JavaSDK: jdk6+ IDE:eclipse.MyEclipse 6.6 开发 ...

  7. EhCache 分布式缓存/缓存集群(转)

    开发环境: System:Windows JavaEE Server:tomcat5.0.2.8.tomcat6 JavaSDK: jdk6+ IDE:eclipse.MyEclipse 6.6 开发 ...

  8. HTTP缓存缓存机制

    http协议无状态,所以缓存设定从两方面考虑.客户端浏览器和服务器端. 浏览器端实现过期机制. 服务器端实现验证机制. 缓存机制. 为了减轻服务器负担,也减少网络传输数量.http1.0定义了Expi ...

  9. Unity3D性能优化小tips——把this.transform缓存缓存起来

    Unity3D开发时中有一个小tips,这在官方的文档里其实有提及的,但不那么显眼,这里小说一下: 在MonoBehaviour进行编程时,我们经常会用this.transform, this.gam ...

随机推荐

  1. 「美团 CodeM 初赛 Round A」最长树链

    题目描述 Mr. Walker 最近在研究树,尤其是最长树链问题.现在树中的每个点都有一个值,他想在树中找出最长的链,使得这条链上对应点的值的最大公约数不等于1.请求出这条最长的树链的长度. 输入格式 ...

  2. 正经学C#_委托

    以前不会,甚至连想去学都没想.啧啧啧,我是何等朽木啊. 我先不说其中理念,或者原理,咱就先说最简单的用法.怎么去使用委托. 委托 Delegate 使用委托,就要先定义一个委托.定义一个委托就要先声明 ...

  3. AB二进制

    Description 若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数. 例如: (13)10=(1101)2        ...

  4. phaser小游戏框架学习中的屏幕适配

    这篇博客主要讲一下上一篇博客的右侧和底部出现的问题.就是页面会有偏移量.说一下这个产生的原因吧. 一开始在构建html页面的时候,习惯性的在页面中加了 <meta name="view ...

  5. 配置IIS使用Python 与常见问题解决

    打开IIS管理器 选择功能视图,然后选择ISAPI和CGI限制 打开后,在右侧操作,点击添加,会出现下图所示 按图中提示填写相应部分,在选择路径时,默认可能是dll文件,改成全部文件即可,然后再选择p ...

  6. iOS 上的相机捕捉 swift

    第一台 iPhone 问世就装有相机.在第一个 SKDs 版本中,在 app 里面整合相机的唯一方法就是使用 UIImagePickerController,但到了 iOS 4,发布了更灵活的 AVF ...

  7. mybatis主键返回语句 使用方法,就是实体类.getid即可拿到返回的id

    <insert id="insertSelective" parameterType="com.o2o.Content" useGeneratedKeys ...

  8. Spring Security获取已登录的用户信息的两种方法

    第一种是直接从session中手动拿: @RequestMapping(value = "/user", method = RequestMethod.GET)public Res ...

  9. 【SSO】单点登录系统

    一.单点登录系统介绍 对于一个开发项目来说,每个项目都必不可少要有登录的这个功能.但是随着项目的变大,变大,再变大.系统可能会被拆分成多个小系统,咱们就拿支付宝和淘宝来说,咱们在淘宝上购物,然后就可以 ...

  10. POJ 3281 Dining ( 最大流 && 建图 )

    题意 : 有 N 头牛,John 可以制作 F 种食物和 D 种饮料, 然后接下来有 N 行,每行代表一头牛的喜好==>开头两个数 Fi 和 Di 表示这头牛喜欢 Fi 种食物, Di  种饮料 ...