缓存依赖(文件、数据库)

前言

缓存的基本用法介绍:我推荐看下  asp.net缓存 。

本篇,我主要写下一般sql的缓存依赖,还有使用Mvc过滤器的数据库缓存依赖。

什么是缓存依赖

1.缓存:是把你要访问的资源,放在内存中,占用一定的内存空间,从而是用户读取内存中的数据,进而减少读取数据库,或资源文件的次数,从而对你的程序并发量,以及返回请求速率上得到提高的一种机制。

2.缓存的不及时性:由于在缓存的作用时间内,数据放在内存中,不知道数据源是否已经改变,从而是信息失去即时效应。

3.解决不及时性:为啦解决第二条的不及时性,微软想到的就是缓存依赖

4.缓存依赖:就是缓存通过监测依赖项(文件或数据库)的读写,来通知缓存是否过期的一种机制。比如,依赖项是123.txt文件,缓存的数据是234.txt中的数据,那么缓存机制可通过监测123.txt文件中数据的是否变化,来移除缓存234.txt文件的数据。感觉扯淡,还是上代码更给力。

缓存依赖项(文件)

            //文件缓存依赖
            if (cache.Get("key") == null)//如果依赖项中的数据发生变化,此会被通知缓存清空(系统完成清空)
            {
                CacheDependency dp = new CacheDependency(Server.MapPath("/Data/123.txt"));//建立缓存依赖项dp
                string str = DoIOFile.ReadFiles("/Data/111.txt");
                cache.Insert("key", str, dp);
            }
            Response.Write(cache.Get("key"));   //如果123.txt这个文件的内容不变就一直读取缓存中的数据,一旦123.txt文件中的数据改变里面重新读取111.txt文件中的数据

效果:缓存的数据是111.txt中的数据,111.txt中的数据发生变化,钥匙为key的缓存不会被清空,也就是依旧显示没改前的数据。但是如果缓存依赖项123.txt中的数据一旦发生变化,缓存立马被清空,重新写入缓存中新的数据。这就是缓存依赖的好处,你可以试下,我不忽悠你。

缓存依赖项(文件夹)

            //文件夹缓存依赖
            if (cache.Get("key") == null)//如果依赖项中的数据发生变化,此会被通知缓存清空(系统完成清空)
            {
                CacheDependency dp = new CacheDependency(Server.MapPath("/Data"));//建立缓存依赖项dp
                string str = DoIOFile.ReadFiles("111.txt");
                cache.Insert("key", str, dp);
            }
            Response.Write(cache.Get("key"));   //如果123.txt这个文件的内容不变就一直读取缓存中的数据,一旦123.txt文件中的数据改变里面重新读取111.txt文件中的数据

效果:这里/Data是个文件夹,他下面直属Data所有一级文件(就是不能算嵌套文件夹的文件)如果有变动,都会触发通知,清空缓存。

缓存依赖项(多文件)

            //多文件依赖项
            if (cache.Get("key") == null)//如果依赖项中的数据发生变化,此会被通知缓存清空(系统完成清空)
            {
                CacheDependency dp1 = new CacheDependency(Server.MapPath("/Data/123/123.txt")); //这里是监视文件或目录
                CacheDependency dp2 = new CacheDependency(Server.MapPath("/Data/123.txt"));

                CacheDependency[] dps = new CacheDependency[] { dp1, dp2 };
                AggregateCacheDependency aDp = new AggregateCacheDependency(); //多个依赖项
                aDp.Add(dps);
                string str = DoIOFile.ReadFiles("111.txt");
                cache.Insert("key", str, aDp);
            }
            Response.Write(cache.Get("key"));  

效果:依赖项中的任何一个文件有变动,缓存清空,写入新缓存。

Mvc中的缓存

mvc中缓存的使用方法相对来说比较简单,只用在过滤器上定义一下就行啦,其它的我就不累述啦,与webForm无异。

        [OutputCache(Duration = 20)] //定义缓存,秒为单位,Duration是必填项
        public ActionResult Index()
        {
            string str = DoIOFile.ReadFiles("/111.txt");
            Response.Write(str);
            return View();
        }

具体配置详见:http://msdn.microsoft.com/zh-cn/library/system.web.mvc.outputcacheattribute.aspx

缓存依赖(数据库表)

这个多少有点繁琐,跟着做。

1.打开项目配置文件

 <connectionStrings>
    <add name="Am_WeixinWeb" connectionString="data source=192.168.1.200;initial catalog=Am_WeixinWeb;uid=sa;password=lh1234;"  />
  </connectionStrings>
<system.web>
    <caching>
      <sqlCacheDependency enabled="true" pollTime="2000">
        <databases>
          <add name="Test" connectionStringName="Am_WeixinWeb" />
        </databases>
      </sqlCacheDependency>
    </caching>

注记:pollTime,毫秒为单位,意识是每隔2秒检测下数据库,检测表是否有发生变化。connectionStringName为数据库链接字符串。

2.启动数据库缓存依赖

在C盘中,搜索到工具aspnet_regsql.exe

在命令中 cd:运行到此工具的文件下,键入下面命令

aspnet_regsql -C "data source=;initial catalog=codematic;user id=sa;password=" -ed -et -t "T_table"

参数:-c 后跟连接字符串,-t后接建立缓存依赖的表名

工具命令参数列表详见:http://msdn.microsoft.com/zh-cn/library/ms229862

3.使用缓存依赖项

            //sql缓存依赖
            DataSet ds = new DataSet();
            if (cache.Get("key") == null)
            {
                string conStr = DoXml.ReadWebConfigConnectionStrings("Am_WeixinWeb");
                SqlConnection conn = new SqlConnection(conStr);
                string sql = "select top(1) recContent from Am_recProScheme";
                SqlCommand cmd = new SqlCommand(sql, conn);
                SqlDataAdapter sda = new SqlDataAdapter(cmd);

                sda.Fill(ds, "tb1");
                SqlCacheDependency dep = new SqlCacheDependency("Test", "Am_recProScheme");  //Test对应配置项的缓存配置key ,后面是数据库表名
                cache.Insert("key", ds.Tables["tb1"].Rows[0]["recContent"].ToString(), dep);
            }
            Response.Write(cache.Get("key"));

效果:数据库Am_WeixinWeb中表Am_recProScheme中的数据有所变动,则清空缓存,重新写入。

Mvc过滤器中配置缓存依赖(数据库)

1.打开项目配置文件

 <connectionStrings>
    <add name="Am_WeixinWeb" connectionString="data source=192.168.1.200;initial catalog=Am_WeixinWeb;uid=sa;password=lh1234;"  />
  </connectionStrings>
 <caching>
      <sqlCacheDependency enabled="true" pollTime="2000">
        <databases>
          <add name="Test" connectionStringName="Am_WeixinWeb" />
        </databases>
      </sqlCacheDependency>
    </caching>

注记:pollTime,毫秒为单位,意识是每隔2秒检测下数据库,检测表是否有发生变化。connectionStringName为数据库链接字符串。

2.配置过滤器

        //mvc缓存依赖
        [OutputCache(Duration = 20, SqlDependency = "Test:Am_recProScheme")] //Test:为缓存配置的key,后面跟的是缓存依赖表
        public ActionResult Index()
        {
            Response.Write(db.Am_recProScheme.FirstOrDefault().recContent);
            return View();
        } 

效果:数据库Am_WeixinWeb中表Am_recProScheme中的数据有所变动,则清空缓存,重新写入。

本文以实用简略为主,如有探讨,可加左上方技术交流群,谢谢阅读,愿能给你一点点帮助。

缓存依赖(文件、数据库)

时间: 2024-11-13 03:06:58

缓存依赖(文件、数据库)的相关文章

MVC缓存依赖:文件依赖

<1>所谓缓存依赖,文件依赖就是指,我不我没有设置缓存的过期时间,当缓存依赖的文件内容发生改变的时候,就通知framework清空缓存.然后重数据库中取数据(或者文件中取数据)然后又把取到是数据缓存起来,用户请求的时候,直接从缓存中取数据,如果缓存依赖的文件内容又发生改变,就又清空,周而复始.. using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We

.Net 缓存依赖详解

缓存命名空间的讲解流程 16.1  System.Web.Caching简介 本节从缓存命名空间的总体简介和组成结构入手,从整体上对System.Web.Caching进行概述. 16.1.1  System.Web.Caching概述 System.Web.Caching 是用来管理缓存的命名空间.缓存就是将服务器端的数据暂时保存在客户端,方便用户的读取.缓存命名空间的父级空间是“System.Web”,由此可以看 出,缓存通常用于Web网站的开发,包括在B/S项目中的开发.缓存的设计主要是考

开启SQLSERVER数据库缓存依赖优化网站性能

很多时候,我们服务器的性能瓶颈会是在查询数据库的时候,所以对数据库的缓存非常重要,那么有没有一种方法,可以实现SQL SERVER数据库的缓存,当数据表没有更新时,就从缓存中读取,当有更新的时候,才从数据表中读取呢,答案是肯定的,这样的话我们对一些常用的基础数据表就可以缓存起来,比如做新闻系统的新闻类别等,每次就不需要从数据库中读取了,加快网站的访问速度. 那么如何开启SQLSERVER数据库缓存依赖,方法如下: 第一步:修改Web.Config的<system.web>节的配置,代码如下,让

c#依赖文件缓存

public void RemovedCallbackRole(string key, object value, CacheItemRemovedReason reason) { // 在应用程序启动时运行的代码 BLL.JUESE bll = new BLL.JUESE(); //显示当前时间,以便判断是否为缓存中页面 //缓存依赖于文件TextFile.txt //string fileDependencyPath = "F:\\View\\code\\cm1test\\Web\\Text

c# 数据库缓存依赖

1.为缓存依赖项启动通知数据库 在vs开发人员命令提示中运行(切换到aspnet_regsql.exe所在目录,示例目录:C:\Windows\Microsoft.NET\Framework64\v4.0.30319):    aspnet_regsql -S .  -U sa -P pwd -ed -d xxx  -et -t xxx; 缓存依赖禁用: aspnet_regsql -S . \ds -E -dd -d XXX -S服务器名称 -E集成身份验证 -U 账号 -P 密码  -ed为

.NET 数据库缓存依赖策略实现

处理大型门户网站 一般都需要 使用缓存技术这个web加速器在 PHP 和 java 一般 使用的是 基于squid 来做. 当然在 windows .NET 平台也是可以的 squid有 windows版本.这个以后再去研究,现在 就介绍一下 .NET 自带的 缓存策略.Microsoft的petshop就用到了它; 一.基于数据库触发(设置缓存依赖策略,当数据库中数据发生变化时,触发缓存失效;但微软提供的解决方案目前仅支持SQL Server,如果是ORACLE需要自己实现触发接口). 二.基

使用 SQL 缓存依赖项,数据库缓存依赖 (附实例)

使用 SQL 缓存依赖项 最简单的缓存策略就是使缓存数据在一个指定的时间周期后过期.但是这个简单的方法意味着缓存数据没有保持与底层数据源的联系,从而导致过期数据长时保存或当前数据很快过期.更好的方法是使用 SqlCacheDependency 类,这样数据一直被缓存,直到其底层数据在 SQL 数据库中被修改.本篇教程将讲解怎样使用这个类. Part 1 简介 使用 ObjectDataSource 缓存数据 和在架构中缓存数据 教程中探讨的缓存技术使用基于时间的有效期 , 在指定的周期过后从缓存

Asp.net数据库缓存依赖

Asp.net数据库缓存依赖 更多的时候,我们的服务器性能损耗还是在查询数据库的时候,所以对数据库的缓存还是显得特别重要,上面几种方式都可以实现部分数据缓存功能.但问题是我们的数据有时候是在变化的,这样用户可能在缓存期间查询的数据就是老的数据,从而导致数据的不一致.那有没有办法做到,数据如果不变化,用户就一直从缓存中取数据,一旦数据变化,系统能自动更新缓存中的数据,从而让用户得到更好的用户体验. 答案是肯定的!.NET已经为我们提供了这样一种非常好的解决方法:SqlCacheDependency

Asp.net文件缓存依赖

Asp.net文件缓存依赖 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class Default4 : System.Web.UI.Page { /// <summary> /// 获取当前应用程序指定CacheKey的Cache对