一,.Net中的缓存基础知识
.net中支撑的两种依靠:
CacheDependency |
SqlDependency |
示意关于文件或许目次的依靠 |
示意关于SQL数据库的依靠 |
逾期时刻
相对逾期时刻 |
滑动逾期时刻 |
一个特定的时刻点,范例为DateTime
|
一个时刻距离,范例为TimeSpan |
优先级 : CacheItemPriority
由于我们须要缓存大批的数据,在内存有限的情况下,就必需对缓存的数据举行优先级分类,以便在须要的时刻,将不主要的数据从缓存中移除。优先级用来指定缓存数据的主要性,主要的数据能够更长时刻地保存在内存中。
删除关照
当被缓存的数据从内存中移除的时刻,能够供应一个关照机制,往返挪用户定义的要领,要领必需相符CacheItemRemovedCallback托付的定义。。
特别注意:
1,回调的机遇是不可预知的,不能假定回调发作时,回调要领的实行线程存在HttpContext的上下文,为了在没有要求上下文的时刻获得对Cache对象的援用,能够经由过程HttpRuntime的cache属性来运用应用程序的cache.
2,不能在页面上运用实例要领来作为回调要领,挡在页面上运用回调要领时,由于指向回调要领的援用会阻挠垃圾接纳机制,因此会形成内存很快耗光。
3,平常经由过程在自定义类的静态要领完成回调要领,或许运用页面对象的静态要领完成。
二,基于文件的缓存示例
起首在测试页面上加个label:
<asp:Label Text="" runat="server" id="label1"/>
接着,到场缓存管理类:
<span style="font-size:14px;">namespace 基于文件的缓存依靠 { public class CacheManager { public static string Message { get { HttpContext context = HttpContext.Current; //起首从缓存中猎取 string message = context.Cache["Message"] as string; //假如缓存中没有数据 if (message==null) { string path = context.Server.MapPath("TestFileCache.txt"); message = System.IO.File.ReadAllText(path); //将信息保存到缓存中,设置相应的逾期时刻为1分钟 context.Cache.Add( "Message", message, new System.Web.Caching.CacheDependency(path),//依靠于文件或许目次的依靠 System.Web.Caching.Cache.NoAbsoluteExpiration,//不运用相对逾期时刻 new TimeSpan(0, 0, 5),//缓存的时刻 System.Web.Caching.CacheItemPriority.Normal, //缓存的优先级 Callback); //逾期时的回调 } return message; } } /// <summary> /// Callbacks the specified key. /// </summary> /// <param name="key">The key.</param> /// <param name="value">The value.</param> /// <param name="reason">The reason.</param> /// <remarks>Editor:v-liuhch CreateTime:2015/5/26 20:13:22</remarks> private static void Callback( string key, Object value, System.Web.Caching.CacheItemRemovedReason reason //缘由 ) { if (reason == System.Web.Caching.CacheItemRemovedReason.Expired) { HttpRuntime.Cache.Insert("Message","时刻已到,缓存已逾期"); } } } }</span>
这里,区别下cache的Add要领和Insert要领:
在挪用Add的时刻,假如要到场的缓存项存在的话,则会挪用失利;然则假如用insert插进去,则新插进去的value值会覆盖掉本来的value值。
在webform1中,到场一行测试下:
protected void Page_Load(object sender, EventArgs e) { this.label1.Text = CacheManager.Message; //猎取缓存 }
能够看到已读到文件中的内容了,由于设置的是5s后逾期,所以5s后我们革新下:
然则屡次测试我们会发明,革新后涌现逾期的正确时刻并非5s,同时考证了回调的机遇是不可预知的。
以上就是.net缓存——基于文件的缓存的内容,更多相关内容请关注ki4网(www.ki4.cn)!