一、缓存的类别
1、页面输出ASP.NET数据缓存
页面输出缓存是一种传统级别的相对简单的缓存机制。它将页面数据缓存在服务器内存中,当有客户端再次请求这些内容的时候,服务器可以直接将这些页面数据输出,直到数据缓存过期。
页面输出缓存有两种使用方法:
使用@ OutputCache指令,常见代码如:
〈%@ OutputCache Duration="60" VaryByParam="sID" Location="Any"%〉
以上例子定义了页面输出缓存有效时间为60s,60s后新建缓存;缓存版本因页面传递的sID参数不同而不同;Location="Any"指定了。
使用页面输出缓存API该方法在页面的程序部分执行,常见代码如:
Response.Cache.SetExpires(DataTime.Now.AddSeconds(60));
上句设定页面缓存有效时间为60s。
2、页面部分缓存
有时候我们可能并不希望把整个页面都缓存起来,而只是缓存页面的某个部分。常用方法有3种:
使用@ OutputCache指令
这种方法的实质是:将需要缓存的这部分内容做成用户自定义控件,然后为自定义控件设置页面缓存代码,方法同页面输出缓存。
3、应用程序数据缓存
ASP.NET数据缓存的主要功能是在内存中存储各种与应用程序相关的对象。方法有三种:
指定键和值
Cache["keyName"] = "123";
该语句将新建或者重写名称为txtName的缓存,并赋值为123。
使用Add方法
Cache.Add("keyName","123",null,DataTime.Now.AddSeconds(60),TimeSpan.Zero, CacheItemPriority.High,onRemove);
该句实现上例同样的功能,并设定其缓存依赖项为null;缓存有效时间为60s;最后一次访问所添加对象时到该对象过期时间的时间间隔为零(TimeSpan.Zero);缓存对象优先级为High;当缓存被删除时调用委托名称为onRemove。
使用Insert方法
Insert方法和Add方法使用方法基本一致,但Insert方法还有几种自己的重载后的方法,例如:
Cache.Insert("keyName","123");
4、缓存依赖
ASP.NET数据缓存的好处很多,但他也有弊端。比如说数据的实时性,用户获取的页面可能是几十秒甚至是几个小时以前的服务器缓存信息,这一点对于实时性要求比较高的程序来说是不可容忍的。这时候我们可以通过设定缓存依赖,通过对依赖文件的更改变动情况的判断,来决定程序是否需要重建(刷新)缓存。
缓存依赖的方式有很多种,这里我们着重讲解自定义依赖缓存: 自定义缓存依赖
代码:
string fileName = Server.MapPath
("file.xml");//设置文件路径
DateTime dt = DateTime.Now;
//设置跟踪依赖文件的开始时间
CacheDependency dep = new CacheDependency
(fileName,dt);//创建依赖对象
二、缓存使用举例
ASP.NET缓存数据技巧三则
- ﹤%...@ Page Language="C#" AutoEventWireup="true" CodeFile="date.aspx.cs" Inherits="date" %﹥
- 2. ﹤%...@ OutputCache Duration="60" VaryByParam="CustomerID" %﹥
- 3. ﹤!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"﹥
- 4.
- 5. ﹤html xmlns="http://www.w3.org/1999/xhtml" ﹥
- 6. ﹤head runat="server"﹥
- 7. ﹤title﹥ASP.NET数据缓存﹤/title﹥
- 8. ﹤/head﹥
- 9. ﹤body﹥
- 10. ﹤form id="form1" runat="server"﹥
- 11. ﹤div﹥
- 12. ﹤asp:GridView ID="GridView1" runat="server" BackColor="LightGoldenrodYellow"
- 13. BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" GridLines="None"﹥
- 14. ﹤FooterStyle BackColor="Tan" /﹥
- 15. ﹤SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" /﹥
- 16. ﹤PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" /﹥
- 17. ﹤HeaderStyle BackColor="Tan" Font-Bold="True" /﹥
- 18. ﹤AlternatingRowStyle BackColor="PaleGoldenrod" /﹥
- 19. ﹤/asp:GridView﹥
- 20. ﹤br /﹥
- 21. ﹤br /﹥
- 22. ﹤asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/date.aspx?CustomerID=16"﹥16﹤/asp:HyperLink﹥
- 23. ﹤asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/date.aspx?CustomerID=19"﹥19﹤/asp:HyperLink﹥
- 24. ﹤/div﹥
- 25. ﹤/form﹥
- 26. ﹤/body﹥
- 27. ﹤/html﹥protected void Page_Load(object sender, EventArgs e)
- 28. ...{
- 29. string conn, comm, id;
- 30. if (Request.QueryString["CustomerID"] == null)
- 31. ...{
- 32. id = "16";
- 33. }
- 34. else
- 35. ...{
- 36. id = Request.QueryString["CustomerID"];
- 37. }
- 38.
- 39. conn = "Server=WEB\SQLEXPRESS;Uid=moon;Pwd=1qaz2wsx;Database=store";
- 40. comm = "SELECT * FROM orders WHERE CustomerID =" + id;
- 41.
- 42. SqlDataAdapter da = new SqlDataAdapter(comm, conn);
- 43. DataSet ds = new DataSet();
- 44. da.Fill(ds);
- 45.
- 46. GridView1.DataSource = ds.Tables[0];
- 47. GridView1.DataBind();
- 48.
- 49. Response.Write(DateTime.Now.ToString());
- 50. }
- using System;
- 52. using System.Web.Caching;
- 53. using System.Data;
- 54. using System.Data.SqlClient;
- 55. using System.Configuration;
- 56. using System.Collections;
- 57. using System.Web;
- 58. using System.Web.Security;
- 59. using System.Web.UI;
- 60. using System.Web.UI.WebControls;
- 61. using System.Web.UI.WebControls.WebParts;
- 62. using System.Web.UI.HtmlControls;
- 63.
- 64. public partial class DataCache : System.Web.UI.Page
- 65. ...{
- 66. DataView dv;//先声明一个数据视图用来存放数据库里的数据表
- 67.
- 68. protected void Page_Load(object sender, EventArgs e)
- 69. ...{
- 70. dv = (DataView)Cache["ds"];//从ASP.NET数据缓存中读取数据表
- 71.
- 72. if (dv == null)//如果缓存是空的,就建立数据库连接,从数据库里读数据
- 73. ...{
- 74. string conn, comm;
- 75. conn = "Server=WEB\SQLEXPRESS;Uid=moon;Pwd=1qaz2wsx;Database=store";
- 76. comm = "SELECT * FROM orders";
- 77.
- 78. SqlDataAdapter da = new SqlDataAdapter(comm, conn);
- 79. DataSet ds = new DataSet();
- 80. da.Fill(ds);
- 81. dv = ds.Tables[0].DefaultView;
- 82. //下面这句是关键,具体参数后面介绍
- 83. Cache.Insert("ds", dv, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(3));
- 84. Databind();
- 85. Label1.Text = DateTime.Now.ToString();//参考用的时间,可有可无
- 86. }
- 87. else
- 88. ...{
- 89. Databind();
- 90. Response.Write("Is Cache Data!!!");//此句可有可无
- 91. }
- 92. }
- 93.
- 94. protected void Databind()//自定义的数据绑定方法
- 95. ...{
- 96. GridView1.DataSource = dv;
- 97. GridView1.DataBind();
- 98. }
- 99. }
在这个例子里当缓存建立后过 5分钟就过期。
Cache.Insert("ds", dv, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(5));