博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Asp.net中的Cache--HttpRuntim.Cache 和 HttpContext.Current.Cache
阅读量:5988 次
发布时间:2019-06-20

本文共 1648 字,大约阅读时间需要 5 分钟。

在ASP.NET中有两个类都提供缓存支持, 一个是HttpRuntime类的Cache属性, 另一个是HttpContext类的Cache属性. 通过查看这两个属性的类型可以发现其实这两个属性都是System.Web.Caching.Cache类的实例.那为什么需要同时提供两种支持呢? 查询MSDN后发先,这两个缓存的应用的场景不一样, HttpRuntime.Cache是应用程序级别的缓存, HttpContext.Current.Cache是针对Web上下文定义的, 是一个局部的缓存.(这段话需要进一步求证)

缓存的作用

ASP.NET是一种动态页面技术,用ASP.NET技术做出来的网页几乎都是动态的,所谓动态是指:页面的内容会随着不同的用户或者持续更新的数据, 而呈现出不同的显示结果。既然是动态的,那么这些动态的内容是从哪里来的呢?我想绝大多数网站都有自己的数据源, 程序通过访问数据源(如数据库系统, 文件系统)获取页面所需的数据,然后根据一些业务规则的计算处理,最后变成适合页面展示的内容。

由于这种动态页面技术通常需要从数据源获取数据,并经过一些计算逻辑,最终变成一些HTML代码发给客户端显示。而这些计算过程显然也是有成本的。 这些处理成本最直接可表现为影响服务器的响应速度,尤其是当数据的处理过程变得复杂以及访问量变大时,会变得比较明显。 另一方面,有些数据并非时刻在发生变化,如果我们可以将一些变化不频繁的数据的最终计算结果(包括页面输出)缓存起来, 就可以非常明显地提升程序的性能,缓存的最常见且最重要的用途就体现在这个方面。 这也是为什么一说到性能优化时,一般都将缓存摆在第一位的原因。 我今天要说到的ASP.NET Cache也是可以实现这种缓存的一种技术。 不过,它还有其它的一些功能,有些是其它缓存技术所没有的。

缓存的用法

创建缓存和读取缓存, 这是缓存的基本用法. 读取缓存通过Cache.Get(key) 或 Cache[key], 而创建缓存的方式有两种Add和Insert, 这两种方式的差别在与: 当要创建的缓存已经存在时, Insert会覆盖原有的缓存项, 而Add不会.

缓存的过期时间

ASP.NET支持二种缓存项的过期策略:绝对过期和滑动过期。

1. 绝对过期,这个容易理解:就是在缓存放入Cache时,指定一个具体的时间。当时间到达指定的时间的时,缓存项自动从Cache中移除。

2. 滑动过期:某些缓存项,我们可能只希望在有用户在访问时,就尽量保留在缓存中,只有当一段时间内用户不再访问该缓存项时,才移除它, 这样可以优化内存的使用,因为这种策略可以保证缓存的内容都是【很热门】的。 操作系统的内存以及磁盘的缓存不都是这样设计的吗?而这一非常有用的特性,Cache也为我们准备好了,只要在将缓存项放入缓存时, 指定一个滑动过期时间就可以实现了。

以上二个选项分别对应Add, Insert方法中的DateTime absoluteExpiration, TimeSpan slidingExpiration这二个参数。

注意:这二个参数都是成对使用的,但不能同时设置它们,最多只能一个参数值有效。也就是当设置absoluteExpiration时, slidingExpiration就必须设置为NoSlidingExpiration,  而当设置slidingExpiration时,absoluteExpiration必须设置为NoAbsoluteExpiration

缓存依赖项

缓存对象中的项可以与文件、缓存键、文件或缓存键的数组或另一个 CacheDependency 对象之间建立依附性关系。 CacheDependency 类监视依附性关系,以便在任何这些对象更改时,自动移除该缓存项。

参考资料

http://www.cnblogs.com/fish-li/archive/2011/12/27/2304063.html

你可能感兴趣的文章
MySQL · myrocks · myrocks之事务处理
查看>>
【阿里云资讯】云计算再下一城 阿里云携手中国化工集团
查看>>
正则表达式全部符号解释
查看>>
从简单Sql探索优化之道
查看>>
交通灯管理系统
查看>>
Android的logcat日志工具使用详解
查看>>
阿里金融云视频直播分享会-云中沙箱直播实验限时免费
查看>>
hibernate链接数据库链接池c3p0配置
查看>>
Docker 引领企业软件供应链创新升级
查看>>
HTML5理论实践与练习(一)
查看>>
阿里中间件:正在开启“第二次去IOE”
查看>>
Flink 案例整合
查看>>
双向链表
查看>>
C++构造函数虚拟化
查看>>
docker专题(2):docker常用管理命令(下)
查看>>
Android实训案例(七)——四大组件之一Service初步了解,实现通话录音功能,抽调接口...
查看>>
Zookeeper的安装的配置
查看>>
Java给服务端发送文件
查看>>
寻找小而美的你 杭州云栖大会等你来Show
查看>>
pt-table-checksum原理详解
查看>>