浅谈缓存技术在ASP.NET中的运用
本篇文章虽不谈架构,但是Cache又是架构中不可或缺的部分,因此,在讲解Cache的同时,将会提及到部分架构知识,关于架构部分,读者可以不用理解,或者直接跳过,
你只需关心Cache即可,具体的架构,会在后续文章中与大家分享。
一 为什么要在ASP.NET 项目中引入缓存
1. 我们先来考虑一个问题,通常,面临高并发问题时,我们应该怎么处理?
下图为常规的处理思路和方法
2.为什么引入Cache呢?
我们知道,造成高并发的根本原因是大量读写的问题,一般地,对于一个系统,读总是比写多,如我们总是逛淘宝,京东,天猫,唯品会等,但我们并不一定买东西(买东西,即下单,下单的操作,对应DB的Write操作),缓存主要解决读的问题(当然,在后期的文章中,我会讲到消息队列MQ,也是一种缓存机制,其不仅仅解决读的问题,还解决写的问题)。
很好,我们知道缓存主要解决读的问题,那么,我们读的东西很多,是不是缓存所有读的内容呢?答案是否定的。缓存主要解决那些高频访问,吃服务器资源,实时性要求比较低,不常更新的内容。
二 ASP.NET 缓存技术概述
(一)ASP.NET缓存技术种类
在ASP.NET实际项目开发中,我们可以采取基本的三种缓存技术:页面缓存、局部页面和数据缓存
1.整页缓存
所谓整页缓存,指缓存整个页面,且设置刷新间隔时间,刷新间隔时间一般以秒为单位(缓存不能全部刷新,且刷新间隔不依赖外部事件);
2.部分页面缓存
所谓部分页面缓存,也叫局部页面缓存,指通过设定影响页面的参数,此时的缓存存储页面的多个版本,一般情况需要按照参数值为这些页面版本设置索引;
3.运用程序缓存
所谓运用程序缓存,也叫数据缓存,指将需要大量服务器资源的对象存储在内存中,在ASP.NET中,由Cache类来实现(Cache类的每个实例对应具体的每个运用程序,
其生存期依赖于运用程序的生存期,当然,如果系统重启或者断电,则另当别论。)
(二)二级缓存技术
在ASP.NET一般的项目中,我们采用二级缓存就可以解决服务器缓存问题了,如下为二级缓存的轮廓图。
1.何为一级缓存?
一级缓存,指不借助于外部缓存的缓存,上图中的二级缓存去掉外部缓存部分即为一级缓存;
2.组成:由Web服务器、数据库服务器和二级缓存系统构成;
3.请求-处理流程:对于读数据,采用从内向外的顺序:内部缓存=》外部缓存=》数据库
(1)首次请求读数据:蓝色的箭头表示首次请求,从数据库服务器DB中取得数据,并将数据缓存在二级缓存系统中;
(2)非首次请求读数据:先从二级缓存内部缓存中取数据显示页面,如果没有数据,则去二级缓存外部缓存中取数据显示页面,若外部缓存中没有数据,则再去数据库服务器中取数据;
(4)对于写数据,才有从外向内顺序:数据库=》外部缓存=》内部缓存(这样做的目的,主要是维护数据的一致性);
4.构成二级缓存系统的外部缓存系统,一般我们可选择MongoDB,Redis,Mencached等;
5.基于SOA+Redis的的一般系统架构(当然,本篇文章不谈架构,因此不会分析架构,但会在后续的文章中单独讲解架构)
6.如何保证数据的一致性?
对于读数据,采用从内向外的顺序;对于写数据,采用从外向内的顺序;
7.缓存的有效期?
我们以Memcached做外部缓存为例,对于ASP.NET内部缓存,我们会担心内存不够用,而对于Memcached,则可以不用担心内存不够用的问题。
采用二级缓存方案,Memcaches缓存与ASP.NET缓存都要进行严格的管理和控制,因为Memcached工作在外层,直接对数据库中的数据进行读取,
且他的内存空间一般较大,故它的缓存数据有效期应该根据缓存数据在运用中的实际缓存有效期来设定,不会受到内部不足而被释放的影响,而ASP.NET
缓存工作在内层,直接与运用程序中的数据进行交互,且ASP.NET框架对自身缓存的内存空间有所限制,缓存空间过大会影响整个运用的性能,为了在
相同的内存空间下缓存更多的数据,ASP.NET缓存的有效期应该小于或等于Memcached缓存的有效期,有效期具体多长时间视内存空间和运用程序访问
频率的高低而定,ASP.NET对同意缓存数据的有效期之和不能大于其在Memcached中的有效期,这样才能达到缓存数据的一致性,两个缓存的协同工作
,可以对运用程序的访问速度带啦很大的提升。
(三)缓存涉及到的一些相关技术
缓存是一门技术,不可能花较少的篇幅即可讲明白,如下简要列举一些Cache相关的技术
1.Cahe维护
维护网络上的,本地的Cache;
2.路由策略
具体的路由策略要根据Cache架构和设计来设定,大致讲解一下本地缓存路由策略
3.替换算法
略
4.预取技术
略
5.Cache性能分析
借助一些性能分析工具来分析,主要关注命中率/缓存对象大小之间关系
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中整页缓存的语法格式
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:
(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>操作即可
(3)缓存依赖
留给读者朋友们去研究,比较简单。
(二)部分页面缓存
部分页面缓存,也叫页面部分缓存,主要解决在页面缓存中需要经常实时更新的一部分内容。
页面部分缓存就是缓存页面的一部分,而不是缓存整个页面,它适用于页面内某些部分可能需要更新的数据的情况,在常用页面部分缓存的技术下经常采用先将整个页面缓存,然后再替换页面中不需要缓存的部分。(用AJAX局部刷新来理解)
(三)运用程序缓存
运用程序缓存是用来存储与运用程序有关的对象,主要由Cache类来实现(命名空间System.Web.Caching),可以以编码的方式灵活地控制缓存的操作。
四 版权区
- 感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。
- 博主网址:http://www.cnblogs.com/wangjiming/。
- 极少部分文章利用读书、参考、引用、抄袭、复制和粘贴等多种方式整合而成的,大部分为原创。
- 如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:2098469527@qq.com。
- 可以转载该博客,但必须著名博客来源。
转载于:https://www.cnblogs.com/wangjiming/p/8271403.html
浅谈缓存技术在ASP.NET中的运用相关推荐
- 《浅谈条形码技术在连锁超市中的应用》论文笔记(二)
一.基本信息 标题:浅谈条形码技术在连锁超市中的应用 时间:2016 来源:品牌(西京学院) 关键词:条形码技术; 连锁超市; 条码的应用; 二.研究内容 1.问题定义: 条形码作为一项以计算机技术和 ...
- 计算机网络技术对教学的作用,浅谈计算机网络技术在教学应用中的作用和发展趋势.docx...
浅谈计算机网络技术在教学应用中的作用和发展趋势 乜大伟 (山东医学高等专科学校,山东临沂276000 ) [摘要]计算机网络技术在教学中应用的推广,新型教学模式对传统教育思想. 教学观念.教学方法产生 ...
- 一起谈.NET技术,ASP.NET 中JSON 的序列化和反序列化
JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍 ...
- 浅谈流媒体技术在无线网络中的应用
原文地址:http://info.broadcast.hc360.com/2009/10/100913135646.shtml 流媒体即媒体内容通过数据网络传送到客户端的同时,在客户端播放的一种机制. ...
- 数据恢复技术在计算机犯罪侦查中的应用,浅谈数据恢复技术在计算机犯罪侦查中的应用...
在文件被删除(并从回收站中清除).FAT表或者磁盘根区被病毒侵蚀造成文件信息全部丢失.物理故障造成FAT表或者磁盘根目录区不可读或对磁盘格式化造成全部文件信息丢失的情况下,可以借助数据恢复软件如Eas ...
- 浅谈云计算技术在企业信息化建设中的应用
1.绪论 "云计算并不是新的概念,也不是任何一个人或一家公司的想法,而是整个行业思维方法的转变." --Google克里斯多夫·比希利亚 "云计算"一词自出现以 ...
- 计算机技术在现代地球科学中的重要性,浅谈GIS技术在地球科学中的应用.doc
浅谈GIS技术在地球科学中的应用.doc 浅谈GIS技术在地球科学中的应用 中图分类号:P9 文献标识码:A 文章编号:1007-0745(2014)02-0181-01 摘要:地理信息系统是指带各种 ...
- 浅谈BIM技术在“智慧工地”建设中的应用
浅谈BIM技术在"智慧工地"建设中的应用 随着信息技术的不断发展,建筑行业的信息化程度不断提高,BIM技术在建设行业得到了广泛的推广和应用,同时,伴随着大数据时代的到来,智慧城市的 ...
- 计算机动画 vr技术应用,浅谈VR技术在动画专业教学中的运用
摘要:VR技术是网络计算机技术快速发展背景下衍生的新技术,其以计算机为载体,能够对复杂数据进行高效的交互和可视化操作,当前,VR技术逐渐向教育领域延伸,作为一种新的教学技术具有非常广阔的前景.本文以V ...
最新文章
- 推荐 Python 十大经典练手项目,让你的 Python 技能点全亮!
- PHP-数据库长连接mysql_pconnect的细节
- Tornado推出2.0版
- 安卓自动化测试(1)安卓自动化测试原理概念
- linux以非root身份运行,以非root用户身份在linux中运行mono-service
- tensorflow_yolo-v3 Intel Realsense 视频流处理模块 opencv.videocapture()
- 许海燕(1987-),女,宁波市智慧城市规划标准发展研究院研究人员.
- 书写「简历」时,需要规避的错误
- 使用jvisualvm通过JMX的方式监控远程JVM运行状况
- autocad2007二维图画法_AutoCAD2007教程(二)二维基本绘图命令
- FastTFT V15.0.1免狗安装包下载
- 基于STM32cubemx的stm32f107vct6代码生成教程,实验一led闪烁
- 六千档最强万金油?华硕无畏Pro15 2022锐龙版笔记本体验
- 蓝桥杯Python快速入门(4)
- webpack打包图片资源问题
- linux相关图形与相关命令
- JAVA的三大特性(举例说明)
- A Game of Thrones(78)
- Mac和网页版Skype更新聊天机器人功能
- TCP-IP学习笔记-- 浅析TCP(1)