首页 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
资讯 业界资讯 软件杂谈 编程开发 网站建设 网络观查 搜索引擎 移动应用 网站运营 网络地图
开发 移动开发 Web前端 架构设计 编程语言 互联网 数据库 系统运维 云计算 开发杂谈
[Web前端] ASP.NET——缓存(cache)
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等等,对于缓存的理解知识刚刚开始,随着以后的学习会不断的深入,希望在以后的学习中继续深入,这只是自己的初步理解。




 此文从网络中自动搜索生成,不代表本网站赞成被搜索网站的内容或立场    查看原文
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 新闻资讯 小游戏 Chinese Culture 股票 三丰软件 开发 中国文化 网文精选 阅读网 看图 日历 万年历 2018年10日历
2018-10-22 1:10:02
 
  网站联系 软件世界网-www.sjsjw.com ©2014 蜀ICP备06016416号 三峰网旗下网站