NET 4.0中新增了一个System.Runtime.Caching的名字空间,它供应了一系列可扩大的Cache框架,本文就简朴的引见一下怎样运用它给顺序增加Cache。
一个Cache框架重要包含三个部份:ObjectCache、CacheItemPolicy、ChangeMonitor。
ObjectCache示意一个CachePool,它供应了Cache对象的增加、猎取、更新等接口,是Cache框架的主体。它是一个抽象类,而且体系给了一个常常使用的完成——MemoryCache。
CacheItemPolicy则示意Cache逾期战略,比方保留肯定时刻后逾期。它也常常和ChangeMonitor一同运用,以完成更庞杂的战略。
ChangeMonitor则重要担任CachePool对象的状况保护,推断对象是不是须要更新。它也是一个抽象类,体系也供应了几个罕见的完成:CacheEntryChangeMonitor、FileChangeMonitor、HostFileChangeMonitor、SqlChangeMonitor。
1、起首新建一个平常掌握顺序,增加一个类,个中代码以下
#region class MyCachePool { ObjectCache cache = MemoryCache.Default; const string CacheKey = "TestCacheKey"; //定义字符串范例常量CacheKey并赋初值为TestCacheKey,那末不能再转变CacheKey的值 //如实行CacheKey="2"; 就会运转毛病在全部顺序中 a的值一向为TestCacheKey public string GetValue() { var content = cache[CacheKey] as string; if(content == null) { Console.WriteLine("Get New Item"); //SlidingExpiration = TimeSpan.FromSeconds(3) //第一种逾期战略,当对象3秒钟内没有获得接见时,就会逾期。假如对象一向被接见,则不会逾期。 AbsoluteExpiration = DateTime.Now.AddSeconds(3) //第二种逾期战略,当凌驾3秒钟后,Cache内容就会逾期。 content = Guid.NewGuid().ToString(); cache.Set(CacheKey, content, policy); } else { Console.WriteLine("Get cached item"); } return content; } #endregion
再在主顺序进口
static void Main(string[] args) { MyCachePool pool = new MyCachePool(); MyCachePool1 pool1 = new MyCachePool1(); while(true) { Thread.Sleep(1000); var value = pool.GetValue(); //var value = pool1.myGetValue(); Console.WriteLine(value); Console.WriteLine(); } }
这个例子创建了一个保留3秒钟Cache:三秒钟内猎取到的是同一个值,凌驾3秒钟后,数据逾期,更新Cache,猎取到新的值。
逾期战略:
夙昔面的例子中我们能够看到,将一个Cache对象到场CachePool中的时刻,同时到场了一个CacheItemPolicy对象,它完成着对Cache对象超期的掌握。比方前面的例子中,我们设置超时战略的体式格局是:AbsoluteExpiration = DateTime.Now.AddSeconds(3)。它示意的是一个相对时刻逾期,当凌驾3秒钟后,Cache内容就会逾期。
除此之外,我们另有一种比较罕见的超期战略:按接见频度决议超期。比方,假如我们设置以下超期战略:SlidingExpiration = TimeSpan.FromSeconds(3)。它示意当对象3秒钟内没有获得接见时,就会逾期。相对的,假如对象一向被接见,则不会逾期。这两个战略并不能同时运用。所以说上面代码中我已解释。
CacheItemPolicy也能够制订UpdateCallback和RemovedCallback,轻易我们记日记或实行一些处置惩罚操纵,异常轻易。
ChangeMonitor
虽然前面枚举的逾期战略是异常常常使用的战略,能满足我们大多数时刻的需求。然则有的时刻,逾期战略并不能简朴的根据时刻来推断。比方,我Cache的内容是从一个文本文件中读取的,此时逾期的前提则是文件内容是不是发作变化:当文件没有发作变动时,直接返回Cache内容,当问及发作变动时,Cache内容超期,须要从新读取文件。这个时刻就须要用到ChangeMonitor来完成更加高等的超期推断了。
因为体系已供应了文件变化的ChangeMonitor——HostFileChangeMonitor,这里就不必本身完成了,直接运用即可。
public string GetValue() { var content = cache[CacheKey] as string; if(content == null) { Console.WriteLine("第二种逾期体式格局"); var file = "C:\\Users\\Administrator\\Desktop\\test.txt"; CacheItemPolicy policy = new CacheItemPolicy(); policy.ChangeMonitors.Add(new HostFileChangeMonitor(new List<string> { file })); content = File.ReadAllText(file, Encoding.Default); //Encoding.Default用于处理乱码题目 //StreamReader sr = new StreamReader(file, Encoding.Default); //content = sr.ReadToEnd(); //sr.Close(); //第二种读取体式格局 cache.Set(cacheKey, content, policy); } else { Console.WriteLine("Get cached item"); } return content; }
这个例子照样比较简朴的,关于那些没有自定义的战略,则须要我们完成本身的ChangeMonitor。下次有时刻在写篇文章更深切的引见一下吧。
以上就是关于.net运用Cache框架怎样给顺序增加Cache的实例的细致内容,更多请关注ki4网别的相干文章!