此类是利用缓存来保存信息的。可以把一些稳定的数据,不会随用户而改变的信息利用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的更多相关文章

  1. System.Web.Caching.Cache类 缓存

    1.文件缓存依赖 public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender ...

  2. System.Web.Caching.Cache类 缓存 各种缓存依赖

    原文:System.Web.Caching.Cache类 缓存 各种缓存依赖 Cache类,是一个用于缓存常用信息的类.HttpRuntime.Cache以及HttpContext.Current.C ...

  3. System.Web.Caching.Cache 方法汇总

    在做后台的时候,想着把所有栏目放到缓存里,就这里了一个类.必然是有缺陷,暂时没有实现滑动缓存 using System; using System.Collections; using System. ...

  4. 清除 System.Web.Caching.Cache 以"xxx"开头的缓存

    public static void ClearStartCache(string keyStart) { List<string> cacheKeys = new List<str ...

  5. 第一节:从程序集的角度分析System.Web.Caching.Cache ,并完成基本封装。

    一. 揭开迷雾 1. 程序集准备 a.  需要给项目添加 System.Web 程序集. b.  需要给使用的地方添加两个引用. 2. 程序集探究      在对应的类中输入关键字 Cache,选中点 ...

  6. System.Web.Caching.Cache类 缓存 各种缓存依赖(转)

    转自:http://www.cnblogs.com/kissdodog/archive/2013/05/07/3064895.html Cache类,是一个用于缓存常用信息的类.HttpRuntime ...

  7. System.Web.Caching.Cache类 Asp.Net缓存 各种缓存依赖

    Cache类,是一个用于缓存常用信息的类.HttpRuntime.Cache以及HttpContext.Current.Cache都是该类的实例. 一.属性 属性 说明 Count 获取存储在缓存中的 ...

  8. C# System.Web.Caching.Cache类 缓存 各种缓存依赖

    原文:https://www.cnblogs.com/kissdodog/archive/2013/05/07/3064895.html Cache类,是一个用于缓存常用信息的类.HttpRuntim ...

  9. 缓存-System.Web.Caching.Cache

    实现 Web 应用程序的缓存. 每个应用程序域创建一个此类的实例,只要应用程序域将保持活动状态,保持有效. 有关此类的实例的信息,请通过Cache的属性HttpContext对象或Cache属性的Pa ...

  10. System.Web.Caching.Cache缓存帮助类

    /// <summary> /// 缓存帮助类 /// </summary> public class CacheHelper { /// <summary> // ...

随机推荐

  1. C# List(T).Reverse 方法 顺序反转

    using System; using System.Collections.Generic; public class Example { public static void Main() { L ...

  2. 对象池1(方法功能)PoolOption

    2.对象池PoolOption(方法功能) //单类型缓冲对象管理(单模池操作管理)功能: 激活.收回.预加载等. namespace kernal { [System.Serializable] p ...

  3. 通过进入单用户模式解决linux中的rc.local修改后无法启动的问题

    问题:本想将teamviewer这个软件随linux自启动,所以将其启动命令放在rc.local中,但是重启后发现linux启动不起来了,系统前面都是正常启动的,就是无法进入帐户登陆界面,无法输入ro ...

  4. windows无法通过installer安装SVN

    1.当你的电脑是windows xp操作系统的时候在安装TortoiseSVN1.8**版本的时候会出现如下问题造成不能完成安装: 出现“无法通过windowsinstaller服务安装此安装程序包. ...

  5. Windows Server 2012 R2

    Windows Server 2012 R2 历史上的Server有2003 server, 2008 server, 2012 server windows server 2012 r2对计算机的消 ...

  6. 使用ajax获取用户所在地的天气

    1.要获取用户归属地的天气,首先得获取用户所在的市区, 这里先获取用户的IP,通过IP获取IP的归属地,从而得到用户 地址. 获取客户端ip: js: <scripttype="tex ...

  7. MVC数据库问题(更新,添加字段)

    1.更新模型之后,在"程序包管理控制器"中输入Update-database,就能自动完成更新 2.对于Update-database之后报错:Automatic migratio ...

  8. gof23 适配器模式

    namespace Adapter { class Program { static void Main(string[] args) { //原实现 ClassBase customa = new ...

  9. Vue Element-ui 框架:路由设置 限制文件类型 表单验证 回车提交 注意事项 监听事件

    1.验证上传文件的类型: (1)验证图片类型 <template> <el-upload class="avatar-uploader" action=" ...

  10. GitHub webstorm 及 README.md 姿势

    README.md 语法格式: 规范的README文件开头都写上一个标题,这被称为大标题. 标题: #一级标题 ##二级标题 ###三级标题 ####四级标题 #####五级标题 ######六级标题 ...