【ASP.NET MVC体系】浅谈缓存技术在ASP.NET中的运用

图片 1

【01】浅谈Google
Chrome浏览器(理论篇)

【02】浅谈Google
Chrome浏览器(操作篇)(上)

【03】浅谈Google
Chrome浏览器(操作篇)(下)

【04】浅谈ASP.NET框架 
 

【05】浅谈ASP.NET
MVC运行过程
    

【06】浅谈ASP.NET MVC
控制器
   

【07】浅谈ASP.NET MVC
路由
   

【08】浅谈ASP.NET MVC
视图
 

【09】浅谈ASP.NET MVC
视图与控制器传递数据

【10】浅谈jqGrid 在ASP.NET
MVC中增删改查
     

【11】浅谈ASP.NET
页面之间传值的二种办法

【12】浅谈缓存技术在ASP.NET中的运用 
     

【13】浅谈NuGet在VS中的运用 
    

【14】浅谈ASP.NET
程序发布过程
         
 

【15】浅谈数据讲明和认证

【16】浅谈倚重注入

【17】浅谈HtmlHelper

【18】浅谈基于APS.NET身份验证

【19】浅谈ASP.NET MVC 模型

【20】浅谈ASP.NET MVC 单元测试

【21】浅谈ASP.NET MVC网络安全;

【22】浅谈ASP.NET MVC八大类扩大

【23】再谈ASP.NET MVC Routing

【24】浅谈ASP.NET 高级话题

【25】浅谈大型ASP.NET MVC项目(含DEMO)

【26】下一文山会海:ASP.NET WebAPI

图片 2

本篇作品虽不谈架构,不过Cache又是架设中必备的一些,因而,在执教Cache的同时,将会提及到有些架构知识,关于架构部分,读者能够不用明白,或者直接跳过,

你只需关注Cache即可,具体的架构,会在继承著作中与我们分享。

一   为啥要在ASP.NET
项目中引入缓存

  1. 俺们先来设想一个题目,平日,面临高并发问题时,我们应有怎么处理?

下图为健康的拍卖思路和章程

 图片 3

2.为何引入Cache呢?

       
我们明白,造成高并发的根本原因是大量读写的题材,一般地,对于一个系统,读总是比写多,如我辈总是逛天猫,京东,天猫,唯品会等,但大家并不一定买东西(买东西,即下单,下单的操作,对应DB的Write操作),缓存紧要解决读的问题(当然,在晚期的著作中,我会讲到音讯队列MQ,也是一种缓存机制,其不但解决读的问题,还缓解写的问题)。

       
很好,我们领悟缓存首要解决读的问题,那么,我们读的东西很多,是不是缓存所有读的内容吗?答案是否定的。缓存紧要解决那个频繁访问,吃服务器资源,实时性要求相比低,不常更新的内容。

二   ASP.NET
缓存技术概述

 (一)ASP.NET缓存技术项目

在ASP.NET实际项目支出中,我们可以动用基本的三种缓存技术:页面缓存、局部页面和数量缓存

图片 4

 1.整页缓存

 
所谓整页缓存,指缓存整个页面,且设置刷新间隔时间,刷新间隔时间一般以秒为单位(缓存无法一切刷新,且刷新间隔不借助外部事件);

 2.局部页面缓存

 
 所谓部分页面缓存,也叫局部页面缓存,指通过设定影响页面的参数,此时的缓存存储页面的五个版本,一般意况需要依照参数值为这一个页面版本设置索引;

 3.运用程序缓存

 
 所谓运用程序缓存,也叫数据缓存,指将急需大量服务器资源的靶子存储在内存中,在ASP.NET中,由Cache类来贯彻(Cache类的每个实例对应具体的各样运用程序,

其生存期依赖于拔取程序的生存期,当然,假如系统重启或者断电,则另当别论。)

 (二)二级缓存技术

在ASP.NET一般的类型中,我们使用二级缓存就可以化解服务器缓存问题了,如下为二级缓存的概略图。

 图片 5

1.何为顶尖缓存?

 
 超级缓存,指不借助于外部缓存的缓存,上图中的二级缓存去掉外部缓存部分即为顶级缓存;

 2.结合:由Web服务器、数据库服务器和二级缓存系统整合;

 3.请求-处理流程:对于读数据,采取从内向外的顺序:内部缓存=》外部缓存=》数据库

   
(1)第一次呼吁读数据:棕色的箭头表示第一次呼吁,从数据库服务器DB中得到数据,并将数据缓存在二级缓存系统中;

   
(2)非第一次呼吁读数据:先从二级缓存内部缓存中取数据显示页面,假诺没有多少,则去二级缓存外部缓存中取数据体现页面,若外部缓存中从未数量,则再去数据库服务器中取数据;

 图片 6

 (4)对于写多少,才有从外向内顺序:数据库=》外部缓存=》内部缓存(这样做的目的,首虽然敬重数据的一致性);

4.组成二级缓存系统的外部缓存系统,一般我们可拔取MongoDB,Redis,Mencached等;

5.基于SOA+Redis的的貌似系统架构(当然,本篇著作不谈架构,因此不会分析架构,但会在延续的稿子中单独讲解架构)

 图片 7

 6.如何保证数据的一致性?

 
对于读数据,接纳从内向外的次第;对于写多少,采纳从外向内的次第;

 7.缓存的有效期?

   
大家以Memcached做表面缓存为例,对于ASP.NET内部缓存,我们会担心内存不够用,而对此Memcached,则足以不用顾虑内存不够用的问题。

   
接纳二级缓存方案,Memcaches缓存与ASP.NET缓存都要举办严酷的田间管理和决定,因为Memcached工作在外围,直接对数据库中的数据开展读取,

且她的内存空间一般较大,故它的缓存数据有效期应该遵照缓存数据在利用中的实际缓存有效期来设定,不会遭遇内部不足而被假释的熏陶,而ASP.NET

缓存工作在内层,直接与应用程序中的数据开展互动,且ASP.NET框架对自身缓存的内存空间有所限制,缓存空间过大会影响整个运用的属性,为了在

同一的内存空间下缓存更多的数量,ASP.NET缓存的有效期应该小于或等于Memcached缓存的有效期,有效期具体多少长度期视内存空间和拔取程序访问

频率的高低而定,ASP.NET对允许缓存数据的有效期之和无法压倒其在Memcached中的有效期,这样才能达到缓存数据的一致性,三个缓存的协同工作

,可以对应用程序的访问速度带啦很大的晋级。

(三)缓存涉及到的有些有关技能

缓存是一门技术,不容许花较少的字数即可注脚白,如下简要列举部分Cache相关的技能

图片 8

 

 1.Cahe维护

珍重网络上的,本地的Cache;

2.路由政策

切实的路由策略要基于Cache架构和规划来设定,大致讲解一下地面缓存路由政策

图片 9

 

3.替换算法

4.预取技术

5.Cache性能分析

依傍一些性质分析工具来分析,重要关心命中率/缓存对象大小之间关系

图片 10

 6.过期策略

理所当然设置过期间隙,一般以秒为单位;

7.数目一致性

管教核心同步,读写多少的逐条等;

8.缓存级别

切切实实的级别,依据实际的业务需要来设定;

9.Cache技术

磁盘缓存,存储器缓存,WWW服务器缓存等;

10.数额缓存技术

 客户端数据缓存,分布式数据缓存,集中式数据缓存等;

三   Cache在ASP.NET
MVC中的运用

(一)整页缓存

1.ASP.NET
MVC中有什么样整页缓存?

 整页缓存是一种相比较简单且常用的缓存格局,缓存这多少个页面。在ASP.NET中,整页缓存一般包括控制器缓存,Action缓存,Web.config缓存等;

2.如何页面需要整页缓存?

 一般地,整页缓存页面具有“读取频繁,数据不常更新、编译时需要占用大量时光和资源”等特征;

3.ASP.NET
MVC中整页缓存的语法格式

图片 11

 

4.例子

 (1)控制器缓存

控制器缓存指把缓存效率于控制器。

 PageCacheController.cs

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 
 7 namespace CacheDemo.Controllers
 8 {
 9     [OutputCache(Duration = 70)]
10     public class ControllerCacheController : Controller
11     {
12         // GET: Default
13         public ActionResult ControllerCache()
14         {
15             
16             ViewBag.CurrentTime = System.DateTime.Now;
17             return View();
18         }
19     }
20 }
21  

PageCache.cshtml

1 @{
2     ViewBag.Title = "ControllerCache";
3 }
4 
5 <h2>ControllerCache</h2>
6 
7 <div>
8     ViewBag的值:@ViewBag.CurrentTime
9 </div>

Result:

图片 12

 

(2)Action缓存

Action缓存指把缓存成效于Action。控制模式缓存与控制器缓存原理差不多,只可是控制器缓存把缓存效率于控制器,控制器方法缓存把缓存效能于控制器方法。这里就不上课了。

(3)Web.config缓存

Web.config缓存,有点类似于我们将数据库连接字符串添加在配置文件一律,看看上边的代码,是否很通晓呢?

<connectionStrings>
    <add name="SqlserverConstr" connectionString="Server=IP;db=DataBaseName;uid=UserName;pwd=Password" providerName="System.Data.SqlClient" />
  </connectionStrings>

Web.config将需要缓存的Controller或Action提取抽象到布置文件中,其实就相当于大家采用数据库连接字符串,使用时,调用即可。

<system.web>
    <caching>
      <outputCacheSettings>
        <outputCacheProfiles>
          <add name ="WebConfiCache" duration="70"/>
        </outputCacheProfiles>
      </outputCacheSettings>
    </caching>
    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime targetFramework="4.6.1" />
  </system.web>

咱们将下边的控制器缓存参数用Web.config来配置

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 
 7 namespace CacheDemo.Controllers
 8 {
 9     //[OutputCache(Duration = 70)]
10     [OutputCache(CacheProfile = "WebConfiCache")]
11     public class ControllerCacheController : Controller
12     {
13         // GET: Default
14         public ActionResult ControllerCache()
15         {
16             ViewBag.CurrentTime = System.DateTime.Now;
17             return View();
18         }
19     }
20 }
21  

分析:

事实上一定简单,就当做数据库连接字符串来操作如故<appSetting>操作即可

图片 13

 (3)缓存倚重

预留读者对象们去钻探,相比较简单。

(二)部分页面缓存

 部分页面缓存,也叫页面部分缓存,重要解决在页面缓存中需要通常实时更新的一部分内容。

 页面部分缓存就是缓存页面的一片段,而不是缓存整个页面,它适用于页面内某些部分或者需要更新的数目标情景,在常用页面部分缓存的技能下通常应用先将所有页面缓存,然后再交替页面中不需要缓存的局部。(用AJAX局部刷新来领会)

(三)运用程序缓存

使用程序缓存是用来囤积与使用程序有关的靶子,首要由Cache类来兑现(命名空间System.Web.Caching),可以以编码的办法灵活地控制缓存的操作。

图片 14

四   版权区

  • 感谢您的读书,若有不足之处,欢迎指教,共同学习、共同提高。
  • 博主网址:http://www.cnblogs.com/wangjiming/。
  • 极少一些作品利用读书、参考、引用、抄袭、复制和粘贴等多种措施组成而成的,大部分为原创。
  • 如你喜欢,麻烦推荐一下;如你有新想法,欢迎提议,邮箱:2098469527@qq.com。
  • 可以转载该博客,但必须出名博客来源。