缓存是将信息放在内存中以避免频繁访问数据库从数据库中提取数据,在系统优化过程中,缓存是比较普遍的优化做法和见效比较快的做法。

对于MVC有Control缓存和Action缓存。

一、Control缓存

Control缓存即是把缓存应用到整个Control上,该Control下的所有Action都会被缓存起来。

我们来看一下例子:

  [OutputCache(Duration = )]
public class HomeController : Controller
{ // GET: Home
public ActionResult Index()
{
ViewBag.CurrentTime = DateTime.Now;
return View();
}
}

view中:

@{
ViewBag.Title = "Index";
} <h2>@ViewBag.CurrentTime</h2>

效果:

不停的刷新页面,时间会每10秒钟更新一次。

二、Action缓存

将缓存加载Action上,这样,只有加缓存的Action才会有缓存,其他的Action没有。

写法与Control的缓存一样。

 //Action缓存,10秒
[OutputCache(Duration = )]
// GET: Home
public ActionResult Index()
{
ViewBag.CurrentTime = DateTime.Now;
return View();
} public ActionResult Index2()
{
ViewBag.CurrentTime = DateTime.Now;
return View();
}

这里分别有两个Action,一个加了缓存的Index,还有一个没有加缓存的Index2

效果:

分别访问这两个页面,不停的刷新这两个页面,Index 中的时间会10秒钟更新一次,而Index2中会实时更新。

三、使用配置文件进行缓存配置

在MVC的Web.config文件中,可以对缓存进行相关的配置。

在system.web节点中,添加caching子节点,然后如下:

 <outputCacheSettings>
<outputCacheProfiles>
<add name="TestConfigCache" duration="10" />
</outputCacheProfiles>
</outputCacheSettings>

配置好后,我们的Control缓存或者Action缓存就可以这么写:

        [OutputCache(CacheProfile= "TestConfigCache")]
// GET: Home
public ActionResult Index()
{
ViewBag.CurrentTime = DateTime.Now;
return View();
}

四、缓存依赖

缓存数据是从数据库中某个表获取的,如果数据库中对应的表的数据没有发生改变,我们就没有必要对缓存数据进行更新,如果数据库对应的表的数据发生了变化,那么,我们相应的缓存数据就应立即更新。

那么缓存是否过期,依赖于数据库对应的表中的数据是否发生变化。这就是缓存依赖。下面我们来写一下。

我们MVC的Web.config文件中进行如下未配置:

1、首先配置数据库连接字符串:

 <connectionStrings>
<add name="sqlCon" connectionString="server=127.0.0.1;database=test;uid=sa;pwd=123456" providerName="System.Data.SqlClient" />
</connectionStrings>

2、进行缓存依赖配置:

    <caching>
<sqlCacheDependency>
<databases>
<add name="PersonCacheDependency" connectionStringName="sqlCon" pollTime=""/>
</databases>
</sqlCacheDependency>
<outputCacheSettings>
<outputCacheProfiles>
<add name="TestConfigCache" duration="" sqlDependency="PersonCacheDependency:Person"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>

其中pollTime为监听数据库变化的间隔时间(毫秒)

以上配置说明:库名:test,监听表名:Person。缓存时间为:3600秒即一小时。数据库依赖周期为500毫秒,即每0.5秒监听下数据库是否有变化,如果有变化则立即更新缓存。

Control中或Action中:

        [OutputCache(CacheProfile= "TestConfigCache")]
// GET: Home
public ActionResult Index()
{
ViewBag.CurrentTime = DateTime.Now;
return View();
}

这样,在一个小时内,只有Person表中的数据发生变化后,缓存才会更新,不然缓存不会更新。

五、注:

当我们配置完缓存以来后,运行我们的项目,可能会出现一下错误提示:

这是因为我们没有对Person表启用缓存通知。

打开vs命令工具行,输入:aspnet_regsql -S localhost -U sa -P 123456 -ed -d test-et -t Person

这样就可以解决上述错误。

好了,MVC的缓存就介绍到这里。见识浅薄,有不当之处,还望大神们指点一二。


浅谈MVC缓存的更多相关文章

  1. $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )

    $.ajax()方法详解   jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...

  2. Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理

    基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...

  3. 浅谈 MVC 和 MTV

    浅谈 MVC 和 MTV 一.MVC M:model,模型,就是数据模型,负责数据的存取: V:view,视图,负责页面的展示逻辑: C:controller,控制器,负责业务逻辑的处理: 二.MTV ...

  4. 浅谈HTTP缓存以及后端,前端如何具体实现HTTP缓存

    <浅谈HTPP缓存>原版: https://juejin.im/post/5bdeabbbe51d4505466cd741?utm_source=gold_browser_extensio ...

  5. 浅谈MVC、MVP、MVVM

    MVC M: Model            模型——数据            (对于前台而言例如:ajax.jsonp等从后台获取数据的) V:  View             视图——表现 ...

  6. 浅谈MVC Form认证

    简单的谈一下MVC的Form认证. 在做MVC项目时,用户登录认证需要选用Form认证时,我们该怎么做呢?下面我们来简单给大家说一下. 首先说一下步骤 1.用户登录时,如果校验用户名密码通过后,需要调 ...

  7. 以用户注册功能模块为例浅谈MVC架构下的JavaWeb开发流程

    JavaWeb应用开发,撇开分布式不谈,只讨论一个功能服务应用的开发,无论是使用原生的Servlet/JSP方案,还是时下的SSM架构,都有一套经过工程实践考验的最佳实践,这综合考虑了团队协作.项目管 ...

  8. 浅谈MVC Razor基本语法

    首先说下MVC,mvc已经不用ViewState来保留网页的状态,所以大部分依赖ViewState的功能都将无法使用, 比如gridview的分页与排序,page trace等利用viewstate记 ...

  9. 浅谈MVC和MVVM模式

    MVC I’m dating with a model… and a view, and a controller. 众所周知,MVC 是开发客户端最经典的设计模式,iOS 开发也不例外,但是 MVC ...

随机推荐

  1. 由Spring框架中的单例模式想到的

    单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例 注:Spring源码的版本4.3.4 Spring依赖注入Bean实例默认 ...

  2. 如何用docker安装laravel开发环境

    如何用docker安装laravel开发环境 看laravel框架的官方文档安装部分时,发现需要安装特别多软件,估计还有许多复杂的配置,官方推荐使用Laravel Homestead虚拟机进行安装,但 ...

  3. 【WC2015】混淆与破解 (Goldreich-Levin 算法)

    这个嘛= =直接贴VFK的题解就行了吧,感觉自己还是差别人太多 http://vfleaking.blog.uoj.ac/blog/104 讲得挺明白了的说,但还是挺难理解的说,中间实现部分简直不要太 ...

  4. groovy学习(三)range

    // 1900..1999 包含边界// 2000..<2100 不包含边界twentiethCentury = 1900..1999reverseTen = 10..1println(twen ...

  5. ASP.NET 运行机制详解

    1.浏览器和服务器的交互原理 通俗描述:我们平时通过浏览器来访问网站,其实就相当于你通过浏览器去访问一台电脑上访问文件一样,只不过浏览器的访问请求是由被访问的电脑上的一个 WEB服务器软件来接收处理, ...

  6. Socket的应用案例

    java提供网络功能的四大类1.InetAddress :用于标识网络上的硬件资源.2.URL:统一资源定位符,通过URL可以直接读取和写入网络上的数据.3.Socket:使用TCP协议实现网络通信的 ...

  7. 概念 : 用户>角色>权限 的管理(Role-Based Access Control)

    RBAC 用户管理规范 概念:每个user有多个accounts,每个account 有一个account binding,有多个roles和多个tasks 举个例子:某个用户现在manager,这是 ...

  8. JS传值和传引用

    之前看<javascript高级程序设计>时就遇到过一个问题,就是函数传参的问题,书上说是按值传递,而非按引用传递.很多人都会认为js里面有两种传值方式,一种是复制,另一种是数组.对象等按 ...

  9. 局域网里连接mysql服务器,其他人连接自己的mysql服务器

    应用场景:  自己在自己的机器上开发网站,同事也要和我一起开发,就两个人,我自己的机器当做服务器,让他直接连我的数据库,看我的项目就行了,并且用svn进行开发,相当不错 问题: 怎样在局域网里,其他人 ...

  10. Bootstrap学习-排版

    1.标题 <h1>~<h6>,所有标题的行高都是1.1(也就是font-size的1.1倍). 2.副标题 <small>,行高都是1,灰色(#999) <h ...