HttpRuntime.Cache与HttpContext.Current.Cache
从MSDN上的解释可以看出,HttpRuntime.Cache是应用程序级别的,而HttpContext.Current.Cache是针对当前WEB上下文定义的。
然而,实际上,这二个都是调用的同一个对象,不同的是:HttpRuntime下的除了WEB中可以使用外,非WEB程序也可以使用。
而HttpContext则只能用在WEB中
插入:
System.Web.HttpContext.Current.Cache.Insert("AuthorizeCode", code, null, DateTime.Now.AddMinutes(5), TimeSpan.Zero);
HttpRuntime.Cache.Insert("AuthorizeCode", code, null, DateTime.Now.AddMinutes(5), TimeSpan.Zero);
获取:
System.Web.HttpContext.Current.Cache.Get("AuthorizeCode")
HttpRuntime.Cache.Get("AuthorizeCode")
移除:
System.Web.HttpContext.Current.Cache.Remove("AuthorizeCode");
HttpRuntime.Cache.Remove("AuthorizeCode");
Add与Insert的不同
HttpRuntime.Cache.Add 存在相同的键会异常,返回缓存成功的对象。
HttpRuntime.Cache.Insert存在相同的键会替换原值,无返回值。
如果您希望某个缓存项目一旦放入缓存后,就不要再被修改,那么调用Add确实可以防止后来的修改操作。而调用Insert方法,则永远会覆盖已存在项。
HttpContext其实是保存在CallContext.HostContext这个属性中
HttpContext并非无处不在!
CallContext.HostContext:获取或设置与当前线程相关联的主机上下文
【当前线程】是个什么意思?
答:
1. 当前线程是指与【当前请求】相关的线程。
2. 在ASP.NET中,有些线程并非总是与请求相关。
感觉有点绕口吗? 不容易理解吗? 还是继续往下看吧。
虽然在ASP.NET程序中,几乎所有的线程都应该是为响应请求而运行的,
但是,还有一些线程却不是为了响应请求而运行,例如:
1. 定时器的回调。
2. Cache的移除通知。
3. APM模式下异步完成回调。
4. 主动创建线程或者将任务交给线程池来执行。