[Asp.net]缓存简介
写在前面
针对一些经常访问而很少改变的数据,使用缓存,可以提高性能。缓存是一种用空间换取时间的技术,说的直白点就是,第一次访问从数据库中读取数据,然后将这些数据存在一个地方,比如内存,硬盘中,再次访问的时候,不必再从数据库中读取,而是从内存或者硬盘中读取数据,可以提高访问速度。
缓存
缓存是一种利用空间换取时间的技术,通俗点也就是将得到的数据放在内存中或者硬盘中,在这段时间内服务器不去读取数据库,或真实的数据源,而是读取你存在内存中的数据。
作用:缓存可以有效的缓解数据库的压力。
一个例子
还是先看一个简单的例子,然后对缓存有一个直观的了解。
public partial class CacheIndex : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DateTime dt = DateTime.Now; //如果缓存中没有currentTime的值,则设置,否则输出缓存中的值 if (Cache["currentTime"] == null) { //将当前时间存入缓存 Cache["currentTime"] = dt; //输出值 Response.Write("第一次读取的时间:"+dt.ToString("yyyy-MM-dd HH:mm:ss")); } else { //否则输出缓存中的值 dt = (DateTime)Cache["currentTime"]; //输出值 Response.Write("从缓存中读取的时间:"+dt.ToString("yyyy-MM-dd HH:mm:ss")); } } } }
第一次访问页面时,会读取当前时间,然后将其写入缓存,刷新页面你会发现,之后读取的值,来自缓存中的数据。如果要清空缓存,可以将其设置为null。
这种设置缓存的方式,是最直观也是最简单的方式。
那么我们是否可以为其设置过期时间呢?当然是可以的,下面看这样一个例子:
public partial class CacheIndex : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DateTime dt = DateTime.Now; //如果缓存中没有currentTime的值,则设置,否则输出缓存中的值 if (Cache["currentTime"] == null) { //将当前时间存入缓存 /* @第一个参数:缓存键 @第二个参数:缓存的值 @第三个参数:缓存依赖项,可以为null,不为其设置依赖项。 @第四个参数:缓存时间,为30秒 @第五个参数:缓存过期时间类型,这里是绝对过期时间,每刷新一次页面之后30秒缓存过期。 */ Cache.Insert("currentTime", dt, null, DateTime.Now.AddSeconds(30), System.Web.Caching.Cache.NoSlidingExpiration); //输出值 Response.Write("第一次读取的时间:" + dt.ToString("yyyy-MM-dd HH:mm:ss")); } else { //否则输出缓存中的值 dt = (DateTime)Cache["currentTime"]; //输出值 Response.Write("从缓存中读取的时间:" + dt.ToString("yyyy-MM-dd HH:mm:ss")); } } } }
无法同时设置 absoluteExpiration 和 slidingExpiration 参数。如果要让缓存项在特定时间到期,可将 absoluteExpiration 参数设置为特定时间,并将 slidingExpiration(滑动过期时间) 参数设置为 NoSlidingExpiration。
如果要让缓存项在最后一次访问该项后的某段时间之后到期,可将 slidingExpiration 参数设置为到期间隔,并将 absoluteExpiration(绝对过期时间) 参数设置为 NoAbsoluteExpiration。
总结
这里简单介绍了缓存的概念,以及举了一个缓存的例子。这里面需要对缓存中的两种过期时间好好体会,绝对过期时间和滑动过期时间。
-
博客地址:http://www.cnblogs.com/wolf-sun/
博客版权:如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步! 再次感谢您耐心的读完本篇文章。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2014-08-09 [Asp.net MVC]Asp.net MVC5系列——实现编辑、删除与明细信息视图