ASP.NET缓存机制

一、页面级缓存

页面顶部增加

<%@ OutputCache Duration="10" VaryByParam="none" %>
则此页面缓存时间为10秒,无参数依赖。

如果页面依赖参数进行缓存,则

<%@ OutputCache Duration="10" VaryByParam="id;name;" %>
BaryByParam是必有属性,无参数则填 none,有参数则填key值,多个参数缓存以分号隔开。

这样当页面请求时会根据参数返回相应的缓存页面,当然缓存时间依然为10秒。

二、配置文件统一配置页面缓存属性

在Web.config配置文件中,system.web标记中增加缓存配置


      
      
        
          
        
      
    

全局配好后,需要缓存的页面也需要进行引用

<%@ OutputCache CacheProfile="newCache" VaryByParam="none" %>

实际目的就是为了统一缓存时间,页面中依赖的参数还是需要单独设置。

三、文件缓存依赖

依赖于某个文件进行缓存,当文件内容被更改后,则更新缓存。

页面中不需要声明 OutputCache了,而是通过代码对依赖项进行修改判断,如果文件一直没有被修改,则Cache不会过期(内存不足IIS自动删除除外)。

 //获取缓存的内容,缓存可存放object类型
 string str = (string)HttpRuntime.Cache["nowTime"];
 //如果缓存中无内容
 if (String.IsNullOrEmpty(str))
 {
        //更新缓存
        str = DateTime.Now.ToString();
        //新建缓存依赖对象
        //命名空间:System.Web.Caching;
        //参数1:依赖的文件绝对路径,参数2:检查文件更改的最后时间
        CacheDependency cdep = new CacheDependency(Server.MapPath("~/CacheRelyOn.txt"), DateTime.Now);
        //插入缓存
        //key值,value值,缓存依赖对象
        Cache.Insert("nowTime", str, cdep);
}

四、数据库缓存依赖

以轮询的方式来查看数据库是否有数据更新,从而确定是否需要更新缓存。

首先,数据库表需要开启 SQL缓存依赖项,这里.Net Framewrok为4.0

1.开启cmd控制台,输入 “cd ..\..” 回到C盘根目录

2.输入“cd Windows\Microsoft.NET\Framework\v4.0.30319”找到目标目录,为执行此目录下的“aspnet_regsql.exe” 

3.启用数据库缓存依赖项:

aspnet_regsql.exe -S localhost -E -d 数据库名 -ed  --为windows身份验证

aspnet_regsql.exe -S localhost -U sa -P 123 -d 数据库名 -ed   --为用户名密码验证

4.启用数据表的缓存依赖项:

aspnet_regsql.exe -S localhost -U sa -P 123 -d 数据库名 -t 表名 -et

每一个表都需要单独执行一次此命令

5.Web.config中配置好数据库连接字符串,如:


    
  
6.Web.config的标记中增加cache配置

    
      
        
            
        
      
    
7.可以使用接口及工厂,这里只简单说一下流程代码

        //获取缓存内容
        string str = (string)HttpRuntime.Cache["nowTime"];
        //如果缓存无内容
        if (String.IsNullOrEmpty(str))
        {
            //更新缓存数据
            str = DateTime.Now.ToString();
            //创建缓存组合依赖对象
            AggregateCacheDependency acdep = new AggregateCacheDependency();
            //添加依赖项,参数1:配置文件中caching标记中add标记的name值,参数2:表名
            acdep.Add(new SqlCacheDependency("sqlCache", "Student"));
            acdep.Add(new SqlCacheDependency("sqlCache", "Teacher"));
            //插入缓存
            Cache.Insert("nowTime", str, acdep);
        }


你可能感兴趣的:(ASP.NET)