net使用缓存框架给程序添加缓存实例的方法

  介绍

这篇文章将为大家详细讲解有关。NET使用缓存框架给程序添加缓存实例的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

4.0中净新增了一个System.Runtime。缓存的名字空间,它提供了一系列可扩展的缓存框架,本文就简单的介绍一下如何使用它给程序添加缓存。

一个缓存框架主要包括三个部分:ObjectCache, CacheItemPolicy, ChangeMonitor。

<强> ObjectCache 表示一个CachePool,它提供了缓存对象的添加,获取,更新等接口,是缓存框架的主体。它是一个抽象类,并且系统给了一个常用的实现——MemoryCache。
<强> CacheItemPolicy 强则表示缓存过期策略,例如保存一定时间后过期。它也经常和ChangeMonitor一起使用,以实现更复杂的策略。
<强> ChangeMonitor 强则主要负责CachePool对象的状态维护,判断对象是否需要更新。它也是一个抽象类,系统也提供了几个常见的实现:CacheEntryChangeMonitor, FileChangeMonitor, HostFileChangeMonitor, SqlChangeMonitor。

1,首先新建一个一般控制程序,添加一个类,其中代码如下

#区域   类MyCachePool   {   ObjectCache缓存=MemoryCache.Default;   常量字符串CacheKey=癟estCacheKey";//定义字符串类型常量CacheKey并赋初值为TestCacheKey,那么不能再改变CacheKey的值//如执行CacheKey=?”;就会运行错误在整个程序中一个的值始终为TestCacheKey         公共字符串GetValue ()   {   var=缓存内容(CacheKey)作为字符串;   如果(内容==null)   {   Console.WriteLine(“获得新的Item");//SlidingExpiration=TimeSpan.FromSeconds (3)//第一种过期策略,当对象3秒钟内没有得到访问时,就会过期。如果对象一直被访问,则不会过期。      AbsoluteExpiration=DateTime.Now.AddSeconds (3)//第二种过期策略,当超过3秒钟后,缓存内容就会过期。         .ToString内容=Guid.NewGuid () ();   缓存。集(CacheKey、内容、政策);   }   其他的   {   Console.WriteLine(“得到缓存item");   }      返回内容;   }      # endregion

再在主程序入口

静态void Main (string [] args)
  {
  MyCachePool池=new MyCachePool ();
  MyCachePool1 pool1=new MyCachePool1 ();
  而(真)
  {
  thread . sleep (1000);
  var值=https://www.yisu.com/zixun/pool.GetValue ();//var值=pool1.myGetValue ();
  Console.WriteLine(价值);
  Console.WriteLine ();
  }
  
  }

这个例子创建了一个保存3秒钟缓存:三秒钟内获取到的是同一个值,超过3秒钟后,数据过期,更新缓存,获取到新的值。

<>强过期策略:

从前面的例子中我们可以看的到,将一个缓存对象加入CachePool中的时候,同时加入了一个CacheItemPolicy对象,它实现着对缓存对象超期的控制,例如前面的例子中,我们设置超时策略的方式是:AbsoluteExpiration=DateTime.Now.AddSeconds(3)。它表示的是一个绝对时间过期,当超过3秒钟后,缓存内容就会过期。

除此之外,我们还有一种比较常见的超期策略:按访问频度决定超期。例如,如果我们设置如下超期策略:SlidingExpiration=TimeSpan.FromSeconds(3)。它表示当对象3秒钟内没有得到访问时,就会过期。相对的,如果对象一直被访问,则不会过期。这两个策略并不能同时使用,所以说上面代码中我已注释。

CacheItemPolicy也可以制定UpdateCallback和RemovedCallback,方便我们记日志或执行一些处理操作,非常方便。

<强> ChangeMonitor

虽然前面列举的过期策略是非常常用的策略,能满足我们大多数时候的需求。但是有的时候,过期策略并不能简单的按照时间来判断,例如,我缓存的内容是从一个文本文件中读取的,此时过期的条件则是文件内容是否发生变化:当文件没有发生变更时,直接返回缓存内容,当问及发生变更时,缓存内容超期,需要重新读取文件。这个时候就需要用到ChangeMonitor来实现更为高级的超期判断了。

由于系统已经提供了文件变化的ChangeMonitor HostFileChangeMonitor,这里就不用自己实现了,直接使用即可。

net使用缓存框架给程序添加缓存实例的方法