Mvc_缓存浅谈
缓存是将信息放在内存中以避免频繁访问数据库从数据库中提取数据,在系统优化过程中,缓存是比较普遍的优化做法和见效比较快的做法。
对于MVC有Control缓存和Action缓存。
一、Control缓存
Control缓存即是把缓存应用到整个Control上,该Control下的所有Action都会被缓存起来。
我们来看一下例子:

[OutputCache(Duration = 10)]
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 = 10)]
// 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="500"/>
</databases>
</sqlCacheDependency>
<outputCacheSettings>
<outputCacheProfiles>
<add name="TestConfigCache" duration="3600" 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_缓存浅谈的更多相关文章
- http缓存浅谈
我们在访问百度首页的时候,会发现不管怎么刷新页面,静态资源基本都是返回 200(from cache): 随便点开一个静态资源是酱的: 哎哟有Response报头数据呢,看来服务器也正常返回了etag ...
- Spring缓存框架原理浅谈
运维在上线,无聊写博客.最近看了下Spring的缓存框架,这里写一下 1.Spring 缓存框架 原理浅谈 2.Spring 缓存框架 注解使用说明 3.Spring 缓存配置 + Ehcache(默 ...
- 浅谈mysql innodb缓存策略
浅谈mysql innodb缓存策略: The InnoDB Buffer Pool Innodb 持有一个存储区域叫做buffer pool是为了在内存中缓存数据和索引,知道innodb buffe ...
- $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )
$.ajax()方法详解 jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...
- Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理
基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...
- 浅谈HTTP缓存以及后端,前端如何具体实现HTTP缓存
<浅谈HTPP缓存>原版: https://juejin.im/post/5bdeabbbe51d4505466cd741?utm_source=gold_browser_extensio ...
- [转]浅谈电路设计中应用DDR3处理缓存问题
本文转自:浅谈电路设计中应用DDR3处理缓存问题_若海人生的专栏-CSDN博客 DDR系列SDRAM存储芯片的高速率.高集成度和低成本使其理所当然成为存储芯片中的一霸.在PC和消费电子领域自是如此,它 ...
- 浅谈angular2+ionic2
浅谈angular2+ionic2 前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别. 1. 项目所用:angular2+ionic2 ...
- 浅谈Hybrid技术的设计与实现第三弹——落地篇
前言 接上文:(阅读本文前,建议阅读前两篇文章先) 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 根据之前的介绍,大家对前端与Native的交互应该有一些简单的认识了,很多 ...
随机推荐
- 自动化测试基础篇--Selenium Python环境搭建
学习selenium python需要的工具: 1.浏览器 2.Python 3.Selenium 4.FireBug(Firefox) 5.chromedriver.IEDriverServer.g ...
- Linux的命名空间详解--Linux进程的管理与调度(二)【转】
Linux Namespaces机制提供一种资源隔离方案. PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace.每个Namespace里面的资源对其他Namesp ...
- Linux 装机必备工具
linux 装机必备工具:安装这些基本能满足日常需求. #!/usr/bin/env sh echo "Env" # vim # tmux # ssh ...
- 转载------------C函数之memcpy()函数用法
转载于http://blog.csdn.net/tigerjibo/article/details/6841531 函数原型 void *memcpy(void*dest, const void *s ...
- Web服务器的反向代理nginx
nginx作为web服务器一个重要的功能就是反向代理. Nginx配置详解 序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭 ...
- C#异步编程のawait和async关键字来写异步程序
一.await和async关键字 .Net平台不断推出了新的异步编程模型,在.net4.5中加入了关键字await和async,顾名思义,await是指方法执行可等待,即可挂起直到有结果(不是必须立即 ...
- EXCEL 偶数、奇数行分开求和公式
例举 : A1行是 123 A2行是 321 A3行是 456 A4行是 789我是加的是A1+A3得出的和还有加的是A2+A4得出的和因为要A1+A3一直加到A601,我用很笨的方式像这样子一个个加 ...
- css3不错的教程
<!DOCTYPE html><html><head><link rel="stylesheet" href="css/styl ...
- day22 Pythonpython 本文json模块
json模块 •应用场景: json模块主要用于处理json格式的数据,可以将json格式的数据转化为python的字典,便于python处理,同时也可以将python的字典或列表等对象转化为json ...
- Java基础之集合篇(模块记忆、精要分析)
千里之行,始于足下.把别人的变成自己,再把自己的分享给别人,这也是一次提升的过程.本文的目的是以一篇文章从整体把握集合体系又不失一些细节上的实现,高手路过. 集合的作用与特点 Java是一门面向对象语 ...