摘抄:

可以看到:读缓存,其实是在调用Get方法,而写缓存则是在调用Insert方法的最简单的那个重载版本。

注意了:Add方法也可以将一个对象放入缓存,这个方法有7个参数,而Insert也有一个签名类似的重载版本, 它们有着类似的功能:将指定项添加到 System.Web.Caching.Cache 对象,该对象具有依赖项、过期和优先级策略以及一个委托(可用于在从 Cache 移除插入项时通知应用程序)。 然而,它们有一点小的区别:当要加入的缓存项已经在Cache中存在时,Insert将会覆盖原有的缓存项目,而Add则不会修改原有缓存项。

也就是说:如果您希望某个缓存项目一旦放入缓存后,就不要再被修改,那么调用Add确实可以防止后来的修改操作。 而调用Insert方法,则永远会覆盖已存在项(哪怕以前是调用Add加入的)。

从另一个角度看,Add的效果更像是 static readonly 的行为,而Insert的效果则像 static 的行为。
注意:我只是说【像】,事实上它们比一般的static成员有着更灵活的用法。

由于缓存项可以让我们随时访问,看起来确实有点static成员的味道,但它们有着更高级的特性,比如: 缓存过期(绝对过期,滑动过期),缓存依赖(依赖文件,依赖其它缓存项),移除优先级,缓存移除前后的通知等等。 后面我将会分别介绍这四大类特性。

在多线程环境下,共用一个容器,冲突是免不了的。如果您只是希望简单的缓存一些数据, 不需要Cache的许多高级特性,那么,可以考虑不用Cache 。 比如:可以创建一个Dictionary或者Hashtable的静态实例,它也可以完成一些基本的缓存工作, 不过,我要提醒您:您要自己处理多线程访问数据时的数据同步问题。
顺便说一句:Hashtable.Synchronized(new Hashtable())也是一个线程安全的集合,如果想简单点,可以考虑它。

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

以上二个选项分别对应Add, Insert方法中的DateTime absoluteExpiration, TimeSpan slidingExpiration这二个参数。
注意:这二个参数都是成对使用的,但不能同时指定它们为一个【有效】值,最多只能一个参数值有效。 当不使用另一个参数项时,请用Cache类定义二个static readonly字段赋值。

这二个参数比较简单,我就不多说了,只说一句:如果都使用Noxxxxx这二个选项,那么缓存项就一直保存在缓存中。(或许也会被移除)

ASP.NET Cache有个很强大的功能,那就是缓存依赖。一个缓存项可以依赖于另一个缓存项。

// 缓存中没有,则从文件中加载
string path = HttpContext.Current.Server.MapPath("~/App_Data/RunOptions.xml");
2. 缓存依赖的对象还可以是SQL SERVER,具体可参考SqlCacheDependency

最新文章

  1. 加密配置文件(App.Config和Web.config)中connectionStrings通用方法
  2. Caffe fine-tuning 微调网络
  3. nginx location配置
  4. 学习XML总结
  5. bzoj4525: [Usaco2016 Jan]Angry Cows
  6. SWFUpload 中文乱码问题
  7. Spring MVC 教程,快速入门,深入分析(转载)
  8. Java 并发编程内部分享PPT分享
  9. 内核对象kobject和sysfs(1)——概述
  10. 离校登记网页项目个人总结(Alpha阶段)
  11. PHP判断访问系统的用户设备类型
  12. (后端)Sql Server日期查询-SQL查询今天、昨天、7天内、30天(转)
  13. 关于js的一些收集
  14. CentOS7LINUX 内核调试符号安装
  15. Spring MVC基本配置和实践(一)
  16. 使用HttpClient发送请求接收响应
  17. homebrew 无法安装,提示不能在根目录下使用
  18. 【Hadoop系列】linux下 root用户免密码登录远程主机 ssh
  19. SAP UI5和微信小程序对比之我见
  20. 使用GDB命令行调试器调试C/C++程序【转】

热门文章

  1. css3 子元素的的应用 注意点
  2. P2661 信息传递 DFS
  3. expect配合shell 实现自动分发秘钥文件
  4. 判断StringBuilder 是否为空
  5. python3.X中pickle类的用法(cPickle模块移除了)
  6. array_unique() - 去除数组中重复的元素值
  7. Flask初学者:视图函数/方法返回值(HTML模板/Response对象)
  8. auto用法
  9. 分离链接法(Separate Chaining)
  10. 4,Flask 中的 request