ASP.NET——缓存(cache)

1.      基础

?  定义

    缓存(cache)是一种用空间换取时间的技术,存在于计算机的很多地方,用来将一些慢速设备中的常用数据保存在快速设备中,取数据的时候直接从快速设备中取,比如cpu二级缓存、内存以及window文件读取缓存。

?  特点

    如果每次进入页面的时候都查询数据库生成页面内容的话,如果访问量非常大,那么网站性能会非常差。而如果只有第一次访问的时候才查询数据库生成页面内容,以后都直接输出内容,则能提高系统的性能,这样无论有多少人访问,都只是访问一次数据库:数据库压力不变。

缓存存在失效问题,为了保证从缓存中读取数据和慢速数据(数据库)中数据一致,需要在慢速数据(数据库)中对应的数据发生变化的时候,清楚缓存中相应的数据(缓存依赖)。

?  分类

    缓存是改进网站性能的第一手段,就像索引是改进数据库性能的第一个手段一样,asp.net的缓存主要分为三类:页面缓存(中庸)、数据源缓存(最不灵活)、数据缓存(灵活)。

 

2.      应用

?  框架

   
注解:左侧是浏览器,右边是服务器,浏览器向服务器请求一个页面,比如说列表页面List.aspx,列表页面调用业务层,业务层调用数据层,访问数据库的方式来读取数据,之后将生成的数据返回,生成html代码后返回给浏览器,这样就是创建业务层,并且和数据层打交道,和数据库打交道是最耗费时间的,数据库和数据库文件打交道,一级比一级耗费时间和占用资源。为了解决这个问题,我们可将返回的生成html的数据存入缓存,下次再次访问的时候直接到缓存中找,这样大大提高了访问效率。

3.      举例演示

?  演示有无缓存的区别

<span style="font-family:Microsoft YaHei;font-size:14px;"><strong>using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace cache
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //  Cache["date"]=要缓存的数据;   这里是自定义缓存的简单声明使用
            string datastr = DateTime.Now.ToLongTimeString();
            Response.Write("第一个输出时间:" + datastr + "</br>");  //这里读取的当前的时间,刷新页面时,这里的时间会随着变化。

            if (Cache["date"] == null) //判断是否存在value值为date的缓存是否存在
            {
               // Cache["date"] = datastr;
                //为缓存设置失效时间
                //下面的参数依次对应设计缓存过期时间的键、值、缓存依赖项、绝对过期时间、滑动过期时间(最后一次时间为主)
                Cache.Insert("date", datastr, null, DateTime.Now.AddSeconds(20), System.Web.Caching.Cache.NoSlidingExpiration);
                Response.Write("第二个输出时间为:" + Cache["date"] + "这里读取的当前的时间");   //这里读取的当前的时间,刷新页面时,这里的时间会随着变化。
            }
            else
            {
                Response.Write(Cache["date"] + "这里是从缓存中读取的时间");//这里读取的缓存中的时间,刷新页面时,这里的随着时间变化,不会变化。
            }
        }
    }
}</strong></span>

?  分类缓存—页面缓存举例

    给页面添加<%@OutputCache Duration=“15” VaryByParam=“none”%>标签就可以启用页面缓存,这样整个页面的内容都会被缓存,页面的asp.net代码、数据源在缓存期间都不会被运行,而是直接输出缓存的页面内容。Duration表示缓存时间,以秒为单位,超过这个时间则会失效,再次生成以后会再次缓存15秒,以此类推,在page.load处设置断点,修改数据库数据测试,这个缓存是在服务器缓存的,不是在客户端,因为用httpwatch还是能够看到向服务器提交的请求的,只不过服务器看到缓存就没有再执行页面类,一般视频、新闻需要缓存。

    缓存是针对所有这个页面的访问者,这样1个访问者和一万个访问者、一次访问和100万次访问对数据库的压力是一样的。

对于页面缓存,我们需要加入指令集。指令集VaryByParam后写进参数即可,比如可以是按id,指令集为“<%@OutputCache Duration="30" VaryByParam="id" %>”,这样便会根据不同id设置不同的页面缓存,且各个页面只是因为参数不同而已,如果有多个确定缓存的参数,则将参数名用分号隔开即可,比如:VaryByParam="id;name"。缓存可能存在过期数据的问题,因此需要根据需求选用。

    当然如果想让任何不同的查询字符串都能创建不同的缓存,则设置VaryByParam="*",一般情况下设置“*”就足够了。

在WebUserControl中也可以像页面缓存一样设置控件的缓存。感兴趣的自己试试。

    前台:

<span style="font-family:Microsoft YaHei;font-size:14px;"><strong><%@ Page Language="C#" AutoEventWireup="true" CodeBehind="cache2.aspx.cs" Inherits="cache.cache2" %>
<%@ OutputCache Duration="30" VaryByParam="none" %>
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ListBox ID="ListBox1" runat="server"></asp:ListBox>
    </form>
</body>
</html></strong></span>

    后台:

<span style="font-family:Microsoft YaHei;font-size:14px;"><strong>using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;

namespace cache
{
    public partial class cache2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            SqlConnection con = DBcon.createcon();
            con.Open();
            SqlCommand cmd = new SqlCommand("select * from login", con);
            SqlDataReader sdr = cmd.ExecuteReader();

            ListBox1.DataSource = sdr;

            ListBox1.DataTextField = "userName";

            ListBox1.DataBind();
            //sdr.Close();
            //con.Close();
            Response.Write("直接从数据库取数据的时间:" + DateTime.Now.ToString());

        }
    }
}</strong></span>

?  数据源控件缓存

    添加对象数据源,详细步骤参考以下博客链接,因为我这里没有建立B层,故而这里不再做演示,自己可以去试试。http://blog.csdn.net/goodshot/article/details/6401551

    缓存的设置比之前简单,只要设定ObjectDataSource的CacheDuration(缓存时间:秒),EnableCaching=true。这样每隔CacheDuration指定的时间段才调用SelectMethod指定的方法来执行数据库查询,其他时候都是直接返回缓存的数据。取数据的过程缓存,在缓存期间,绑定控件向ObjectDataSource要数据,ObjectDataSource直接将缓存的数据返回给控件,不再去向TypeName指向的类要数据。

    工作流程图:

    如果缓存中存在,那么直接将缓存中的数据返回给控件,否则执行相应类的查找,最后将数据返回。

    设置属性图:

    这样使得页面对象刷新,但是数据源没有从数据库中读取。

    同样可以在html面设置:

<span style="font-family:Microsoft YaHei;font-size:14px;"><strong><asp:ObjectDataSource ID="ObjectDataSource1" runat="server" EnableCaching="True" CacheDuration="10" CacheExpirationPolicy="Absolute"></asp:ObjectDataSource></strong></span>

4.      小结

    缓存(cache)是一种用空间换取时间的技术,我们知道还有session和cookie等等,对于缓存的理解知识刚刚开始,随着以后的学习会不断的深入,希望在以后的学习中继续深入,这只是自己的初步理解。

时间: 2024-08-01 03:06:19

ASP.NET——缓存(cache)的相关文章

ASP.NET缓存 Cache

缓存介绍 如果每次进入页面的时候都查询数据库生成页面内容的话,如果访问量非常大,则网站性能会非常差,而如果只有第一次访问的时候才查询数据库生成页面内容,以后都直接输出内容,则能提高系统性能,这样无论多少人访问都只访问一次数据库,数据库压力不变缓存是一种用空间换取时间的技术,存在于计算机中很多地方,用来将一些慢速设备中的常用数据保存在快速设备中,取数据的时候直接从快速设备中取,比如CPU二级缓存,WINDOWS文件读取缓存缓存存在失效的问题:为了保证从缓存中读取数据和慢速数据中数据一致,则需要在慢

asp.net,缓存Cache

缓存Cache: 1>直接使用Cache["content"],缓存与Session不同,所有用户都可以共享.永不过期,由服务器自己维护,当内存不够时,会将老的缓存释放掉. 2>设置绝对过期日期.Cache.Insert("nowTime", DateTime.Now, null, DateTime.Now.AddSeconds(7), TimeSpan.Zero); 3>设置滑动过期日期: Cache.Insert("nowTime&q

asp.net 缓存Cache的使用总结

1).获取缓存值 object o = HttpRuntime.Cache.Get("Key"); 2).设置相对过期缓存值有两种写法 第一种: HttpRuntime.Cache.Insert("Key", "Value", null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(30)); 第二种: HttpRuntime.Cache.Insert(&

ASP.NET缓存中Cache过期的三种策略

原文:ASP.NET缓存中Cache过期的三种策略 我们在页面上添加三个按钮并双击按钮创建事件处理方法,三个按钮使用不同的过期策略添加ASP.NET缓存. <asp:Button ID="btn_InsertNoExpirationCache" runat="server" Text="插入永不过期缓存"      OnClick="btn_InsertNoExpirationCache_Click" />   

ASP.NET 缓存技术分析

缓存功能是大型网站设计一个很重要的部分.由数据库驱动的Web应用程序,如果需要改善其性能,最好的方法是使用缓存功能.可能的情况下尽量使用缓 存,从内存中返回数据的速度始终比去数据库查的速度快,因而可以大大提供应用程序的性能.毕竟现在内存非常便宜,用空间换取时间效率应该是非常划算的.尤 其是对耗时比较长的.需要建立网络链接的数据库查询操作等. 对于web页面的缓存,WebForm与ASP.NET MVC有不同的语法.在WebForm中, <%@ OutputCache Duration="6

我用ASP.NET缓存之SQL数据缓存依赖(SqlCacheDependency)

[名词解释] 缓存(Cache)依赖,大白话解释就是缓存是否更新依赖于其它Object.那么SqlCacheDependency指的就是Cache的数据更新依赖于SQL Server数据库表的变化( 行级别更改)或者SQL 查询结果的变化. 以前也总结过缓存的使用 页面输出缓存:我用ASP.NET缓存之OutputCache 数据缓存:我用ASP.NET缓存之数据缓存 但是对缓存依赖还是很模糊,前阵子有幸在项目中实际运用了此类.现在结合自己的实际以及和网上大牛的经验,给大家分享一下. [使用背景

缓存(Cache)

什么是缓存? web应用程序可被多个用户访问.当用户少,负载低时,可提供快速的访问.当负载成倍增加时,响应就慢下来了.服务器响应慢是高负载网站最常见的问题.为了解决这个问题,我们常采用升级硬件配置,负载均衡,增加带宽等措施.但下载并不是响应慢的唯一原因.我们需要提供一种加快数据访问的机制,进而提升网站的性能.缓存提供了这种解决方案.缓存是种技术.我们可以把频繁使用的数据缓存或把网页临时缓存在本地硬盘为了以后再次访问.在大量用户访问一个站点或一个用户多次访问站点时,缓存技术能加快响应.缓存可以出现

网页的缓存Cache与控制

什么是缓存 Cache? 缓存位于客户端与服务器之间, 或者服务器与服务器之间.它决定是否保存所获资源的副本,以及如何使用副本,何时更新副本,这里所说的资源包括页面的HTML, 图片,文件等等. 使用缓存主要有2大理由: 减少响应延迟,让页面显示更快:因为缓存比源服务器离客户端更近, 如果直接从缓存而不是源服务器响应客户的请求,耗时更少,让网站看上去响应更快: 减少网络带宽消耗:当副本被重用时,减少了从源服务器获取资源的次数,从而减少带宽消耗. 缓存如何工作? 所有的缓存都遵循以下基本规则 保留

[.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能

[.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能 本节导读: 上节说了缓存是以空间来换取时间的技术,介绍了客户端缓存和两种常用服务器缓布,本节主要介绍一种.NET中特别重要的缓布技术Cache.利用Cache提升程序性能. 1. 缓存Cache的命名空间 .NET中对缓存有两个命名空间 命名空间1:System.Web.Caching 命名空间2:System.Runtime.Caching 引用范围:这两个命名空间,都可以在Web和非WEB应用程序中

缓存Cache

转载自  博客futan 这篇文章将全面介绍有关 缓存 ( 互动百科 | 维基百科 )cache以及利用PHP写缓存caching的技术. 什么是缓存Cache? 为什么人们要使用它? 缓存 Caches种类 浏览器缓存 Caches 代理缓存 Caches 缓存对网站的影响? 怎样正确地使用缓存? 网站缓存的工作原理 如何设置网站的缓存 Caches HTML Meta 标签Tags vs. HTTP 报头Headers HTTP 报头Headers (为什么HTTP头对缓存不起作用?) HT