.net缓存——基于文件的缓存
来源:互联网 发布:全套大富豪棋牌源码 编辑:程序博客网 时间:2024/06/10 00:36
一,.Net中的缓存基础知识
.net中支持的两种依赖:
CacheDependency
SqlDependency
表示对于文件或者目录的依赖
表示对于SQL数据库的依赖
过期时间
绝对过期时间
滑动过期时间
一个特定的时间点,类型为DateTime
一个时间间隔,类型为TimeSpan
优先级 : CacheItemPriority
由于我们需要缓存大量的数据,在内存有限的情况下,就必须对缓存的数据进行优先级分类,以便在需要的时候,将不重要的数据从缓存中移除。优先级用来指定缓存数据的重要性,重要的数据可以更长时间地保存在内存中。
删除通知
当被缓存的数据从内存中移除的时候,可以提供一个通知机制,来回调用户定义的方法,方法必须符合CacheItemRemovedCallback委托的定义。。
特别注意:
1,回调的时机是不可预知的,不能假定回调发生时,回调方法的执行线程存在HttpContext的上下文,为了在没有请求上下文的时候取得对Cache对象的引用,可以通过HttpRuntime的cache属性来使用应用程序的cache.
2,不能在页面上使用实例方法来作为回调方法,挡在页面上使用回调方法时,由于指向回调方法的引用会阻止垃圾回收机制,因此会造成内存很快耗光。
3,一般通过在自定义类的静态方法实现回调方法,或者使用页面对象的静态方法实现。
二,基于文件的缓存示例
<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; //获取缓存 }
- .net缓存——基于文件的缓存
- .net缓存——基于文件的缓存
- 【分布式缓存】——-基于redis分布式缓存的实现
- 【分布式缓存】——-基于redis分布式缓存的实现
- 基于反向代理的Web缓存加速——可缓存的CMS系统设计
- [转]基于反向代理的Web缓存加速 ——可缓存的CMS系统设计
- 基于反向代理的Web缓存加速——可缓存的CMS系统设计
- 基于反向代理的Web缓存加速——可缓存的CMS系统设计
- [转]基于反向代理的Web缓存加速 ——可缓存的CMS系统设计
- 基于反相代理的Web缓存加速——可缓存的CMS系统设计
- 基于反相代理的Web缓存加速——可缓存的CMS系统设计
- 基于反相代理的Web缓存加速——可缓存的CMS系统设计
- asp.net基于数据库表的缓存实例
- 基于Couchbase和Spring.Net AOP的分布式缓存实现
- .NET基于Redis缓存实现单点登录SSO的解决方案
- .NET基于Redis缓存实现单点登录SSO的解决方案
- .NET基于Redis缓存实现单点登录SSO的解决方案
- .NET基于Redis缓存实现单点登录SSO的解决方案
- TCP的三次握手,四次挥手
- UVA
- 从CString到char的相互转换
- unit 16
- linux常用命令大全
- .net缓存——基于文件的缓存
- 汉语生僻字大全
- HTML基础 杂论1
- 用Node.js做一个火车票查询小工具
- 2017.8.13~14考试(from 叶牧心)
- Hieberate入门程序
- 延云行业搜索数据库 在大数据生态中位置和重要性
- Java常见异常总结
- vue学习03----vue实例以及生命周期