System.Web.Caching.Cache
此类是利用缓存来保存信息的。可以把一些稳定的数据,不会随用户而改变的信息利用Cache保存起来,可以优化网站的速度。
Cache辅助类已上传:GitHub
Cache和Session,cookie的区别
Session保存在服务器上,每个用户都有自己的Session,不会冲突,关闭网站后该Session丢失。
Cookie是保存在客户端的,如果不清除流浪器的cookie或者不设置过期时间,cookie都不会丢失。
Cache是分配在服务器上的一个公共的内存片。从Cache中读取数据比较快,有些网站就把一些经常被使用的数据放到Cache里,提高访问速度,优化系统性能。
这里主要介绍Cache里面的三个方法。Insert(),GeT(),Remove() 就是 添加,获取,删除
Insert有重载






//Page.Cache和HttpContext.Current.Cache 和一般处理程序 context.Cache 是不一样的,你用什么存的就要什么取
//insert和get的过程如果装箱和拆箱一样
protected override void OnInit(EventArgs e)
{
//添加缓存,
//你就把参数看做为键值对的形式,只是说键的类型确定了(可以重复,下次还可以设置此键),值可以是任何类型
Page.Cache.Insert("One", ""); //只要保存了,在后面的页面都可以获取
}
protected void Page_Load(object sender, EventArgs e)
{
string aa = "";
if (Page.Cache.Get("One") != null) //使用前最后判断一下,以免项目报错
{
aa =(string)Page.Cache.Get("One"); //获取的时需要转型
}
Response.Write(aa + "<br />");
if (Page.Cache.Get("Ywo") == null) //没有此key就是空
{
Response.Write("无此值<br />");
}
}



此方法是可以监视一个文件,如果监视的文件发生了改变,此Cache就清除了。
例如:
①新建一个XML格式的文件用来保存信息,然后做如下准备工作
新建一个类来做对比

利用代码生成xml文件,运行一次就注释了,换成下面的就可以了

protected override void OnInit(EventArgs e)
{
TestClass xiaoming = new TestClass() { ID = , Age = , Name = "小明" };
XmlSerializer xml = new XmlSerializer(xiaoming.GetType());
string path = Server.MapPath("~/xm.xml");
using (Stream stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
{
xml.Serialize(stream, xiaoming);
}
//这段代码运行一遍就可以删除了,代码换成下面的
}
protected override void OnInit(EventArgs e)
{//读取
XmlSerializer xml = new XmlSerializer(typeof(TestClass));
TestClass xiaoming = new TestClass();
string path = Server.MapPath("~/xm.xml");
using (Stream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
xiaoming = (TestClass)xml.Deserialize(stream);
}
CacheDependency cdd = new CacheDependency(path); //监视这个文件
HttpContext.Current.Cache.Insert("xm", xiaoming, cdd); }
然后生成xml文件如下

我们页面结构

按钮就是修改我们的XML文件,点击按钮了,我们之前保存的Cache也就被清除了

public void ProcessRequest(HttpContext context)
{
//此一般处理处理程序用来做显示效果
context.Response.ContentType = "text/plain";
TestClass xm = null;
if (context.Cache.Get("xm") != null)
{
xm =HttpContext.Current.Cache.Get("xm") as TestClass;
}
MemoryStream ms = new MemoryStream();
XmlWriter xw = new XmlTextWriter(ms, null);
xw.WriteStartDocument();
xw.WriteStartElement("xm");
xw.WriteElementString("ID", xm.ID.ToString());
xw.WriteElementString("Name", xm.Name);
xw.WriteElementString("Age", xm.Age.ToString());
xw.WriteEndElement(); xw.Flush();
ms.Flush();
// 将流转换成String并返回
byte[] data = new byte[ms.Length];
ms.Seek(, SeekOrigin.Begin);
ms.Read(data, , data.Length);
ms.Close();
string aa = UTF8Encoding.UTF8.GetString(data);
context.Response.ContentType = "text/xml";
context.Response.Write(aa); }
②打开我们的页面
原理是:一打开我们的页面,我们就把xm.xml里面的信息转成类保存在cache里面,我们点击A标签就会查看到效果,然后我们点击按钮(目的就是改变xm.xml文件),然后在点击A标签就会报错
效果如下:


然后点击按钮,再查看a标签就会报错,证明我们的Cache被清除了。



Cahe里面有两个字段,返回的就是DateTime

例如:两种形式


这个方法手动设置Cache过期

注:Add()和Insert()的区别
Add()和Insert()都可以表示添加一个缓冲,Add()设置了key的值就不能改变了,如同常量一般。而Insert()可以改变key的值。所以一般建议使用Insert()方法
附一个缓存封装类:
/// <summary>
/// 缓存读写工具类
/// </summary>
public class CacheHelper
{
/// <summary>
/// 创建缓存项的文件
/// </summary>
/// <param name="key">缓存Key</param>
/// <param name="obj">object对象</param>
public static void Insert(string key, object obj)
{
//创建缓存
HttpContext.Current.Cache.Insert(key, obj);
}
/// <summary>
/// 移除缓存项的文件
/// </summary>
/// <param name="key">缓存Key</param>
public static void Remove(string key)
{
//创建缓存
HttpContext.Current.Cache.Remove(key);
}
/// <summary>
/// 创建缓存项的文件依赖
/// </summary>
/// <param name="key">缓存Key</param>
/// <param name="obj">object对象</param>
/// <param name="fileName">文件绝对路径</param>
public static void Insert(string key, object obj, string fileName)
{
//创建缓存依赖项
CacheDependency dep = new CacheDependency(fileName);
//创建缓存
HttpContext.Current.Cache.Insert(key, obj, dep);
} /// <summary>
/// 创建缓存项过期
/// </summary>
/// <param name="key">缓存Key</param>
/// <param name="obj">object对象</param>
/// <param name="expires">过期时间(分钟)</param>
public static void Insert(string key, object obj, int expires)
{
HttpContext.Current.Cache.Insert(key, obj, null, Cache.NoAbsoluteExpiration, new TimeSpan(, expires, ));
} /// <summary>
/// 获取缓存对象
/// </summary>
/// <param name="key">缓存Key</param>
/// <returns>object对象</returns>
public static object Get(string key)
{
if (string.IsNullOrEmpty(key))
{
return null;
}
return HttpContext.Current.Cache.Get(key);
} /// <summary>
/// 获取缓存对象
/// </summary>
/// <typeparam name="T">T对象</typeparam>
/// <param name="key">缓存Key</param>
/// <returns></returns>
public static T Get<T>(string key)
{
object obj = Get(key);
return obj == null ? default(T) : (T)obj;
} }
System.Web.Caching.Cache的更多相关文章
- System.Web.Caching.Cache类 缓存
1.文件缓存依赖 public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender ...
- System.Web.Caching.Cache类 缓存 各种缓存依赖
原文:System.Web.Caching.Cache类 缓存 各种缓存依赖 Cache类,是一个用于缓存常用信息的类.HttpRuntime.Cache以及HttpContext.Current.C ...
- System.Web.Caching.Cache 方法汇总
在做后台的时候,想着把所有栏目放到缓存里,就这里了一个类.必然是有缺陷,暂时没有实现滑动缓存 using System; using System.Collections; using System. ...
- 清除 System.Web.Caching.Cache 以"xxx"开头的缓存
public static void ClearStartCache(string keyStart) { List<string> cacheKeys = new List<str ...
- 第一节:从程序集的角度分析System.Web.Caching.Cache ,并完成基本封装。
一. 揭开迷雾 1. 程序集准备 a. 需要给项目添加 System.Web 程序集. b. 需要给使用的地方添加两个引用. 2. 程序集探究 在对应的类中输入关键字 Cache,选中点 ...
- System.Web.Caching.Cache类 缓存 各种缓存依赖(转)
转自:http://www.cnblogs.com/kissdodog/archive/2013/05/07/3064895.html Cache类,是一个用于缓存常用信息的类.HttpRuntime ...
- System.Web.Caching.Cache类 Asp.Net缓存 各种缓存依赖
Cache类,是一个用于缓存常用信息的类.HttpRuntime.Cache以及HttpContext.Current.Cache都是该类的实例. 一.属性 属性 说明 Count 获取存储在缓存中的 ...
- C# System.Web.Caching.Cache类 缓存 各种缓存依赖
原文:https://www.cnblogs.com/kissdodog/archive/2013/05/07/3064895.html Cache类,是一个用于缓存常用信息的类.HttpRuntim ...
- 缓存-System.Web.Caching.Cache
实现 Web 应用程序的缓存. 每个应用程序域创建一个此类的实例,只要应用程序域将保持活动状态,保持有效. 有关此类的实例的信息,请通过Cache的属性HttpContext对象或Cache属性的Pa ...
- System.Web.Caching.Cache缓存帮助类
/// <summary> /// 缓存帮助类 /// </summary> public class CacheHelper { /// <summary> // ...
随机推荐
- oracle merge into与sqlserver merge into 比较
merge into: 在两个表之间,根据与源表联接的结果,对目标表执行插入.更新或删除操作. Oracle在9i引入了merge into命令,SQL Server 2008也引入merge int ...
- Unity [SerializeField]
在Unity3d中Unity3D 中提供了非常方便的功能可以帮助用户将 成员变量 在Inspector中显示,并且定义Serialize关系. 也就是说凡是显示在Inspector 中的属性都同时具有 ...
- 性能测试工具LoadRunner30-LR之监控Tomcat
步骤: 1.通过LR去访问tomcat监控页(安装tomcat的过程可以百度一下) 2.然后通过关联取监控数据 3.通过lr_user_data_point()添加数据到图表中去 double ato ...
- 在cms以及kindeditor中插入百度动态地图的方法
想在网页中插入动态地图不难,直接打开网址http://api.map.baidu.com/lbsapi/creatmap/,然后按照提示操作,最终生成脚本,放到html文件中即可.而在kindedit ...
- [转]JAVA Iterator 的用法
java.util包中包含了一系列重要的集合类.本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的源码实现内幕. 下面我们先简单讨论一个根接口Collection,然后分析一 ...
- Windows窗体应用开发1
1.Windows窗体的基本概念 2.Windows窗体应用程序 3.Windows窗体常见界面元素 4.Windows窗体中的事件处理 1.Windows窗体的基本概念 打开一个Window的系统应 ...
- 使用Zxing生成一维码和二维码
首先引用zxing.dll 到项目中引用 using System; using System.Collections.Generic; using System.Drawing; using Sys ...
- 从零开始的全栈工程师——JS面向对象(初篇)
面向对象编程 面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式.它使用先前建立的范例,包括模块化,多态和封装几种技术.今天,许多流行的编程语言(如Java,JavaScript,C#,C+ ...
- (生产)jsonp - 跨域请求
参考:https://github.com/webmodules/jsonp 参数: url (String) url to fetch opts (Object), optional param ( ...
- 织梦上传webp格式图片
织梦cms如何添加其他格式的图片呢? 这里以webp为类来实现一下如何让织梦支持webp 1.修改系统设置让织梦(dede)支持该图片格式,比如:webp(新图片格式) 系统->系统基本参数-& ...