应用程序Cache对象到高性能Memcached学习之路
来源:微信公众号CodeL
以下是个人学习之路的简单分享,不足之处欢迎大神们批评指正!
在网站开发的初期,我们没有考虑更多的东西,也没有对缓存进行系统的设计,而是直接使用了应用程序缓存对象Cache,但由于系统架构的不断完善,在分布式系统架构中只依靠Cache明显不够,无法实现分布式管理,所以后期我们采用了Memcached高性能分布式内存缓存服务器。
一、应用程序缓存对象Cache
一开始,我们只处理了数据的缓存,缓存和应用程序在一台服务器:

应用程序先去读缓存,若没有数据则去读数据库,然后存入缓存,若有数据则无需再读库,对于Web网站来说,Cache的确可以使性能得到很大提高,在开始的短期时间内,我们也一直使用着Cache,但由于架构的演进,渐渐的出现了一系列的问题:
1. 缓存访问范围只能是当前应用程序池,对于分布式Web站点无法实现缓存的统一管理,往往只能在A站添加一份,B站也添加一份,无法共享缓存资源,这样非常不合理,同时也非常浪费资源。
2. 缓存和应用程序无法分离,无法分布式部署,IIS吃内存已经是非常厉害了,常常导致缓存溢出,且每次更新程序都会导致缓存丢失。
3.缓存管理难度加大,需要对每个站点进行单独的管理。综上,后期由于网站的访问量增加,为解决服务器资源等各方面性能问题,我们不得不将缓存和Web服务器独立开来分开管理,于是我们采用了Memcached分布式缓存。
二、Memcached高性能分布式缓存
使用Memcached缓存之后,我们并没有抛弃应用程序Cache,而是用它来做动态页面输出缓存:

使用Memcached后的缓存设计:
【 IIS服务器 or 其他代理服务器】(内存) :动态页面缓存
【MemCached】(内存):数据缓存
【浏览器缓存】(硬盘):动态/静态页面缓存,静态文件(图片,js,css)
我们通过Memcached实现了缓存的分布式管理,同样我们只对数据库数据进行缓存处理,对于闲下来的Cache我们用它做了少量的动态页面输出缓存:
【断绝发送请求至服务器】的过程 :
1.OutputCache :类型Any——页面被缓存在浏览器、代理服务器端和web服务器端
2.http标头Cache-Control :处理点击“转到”或者光标移入地址栏然后回车,不发送请求至服务器
3.http标头Last-Modified:用来处理F5刷新的,也就是对Last-Modified有效,需要请求服务器判断是否加载新的内容
缓存用于在动态应用中减少数据库负载,更好的分配资源,提升访问速度。是开发中必须学习的技术,这里给大家简单介绍了我在开发中使用缓存的一些经历,对于Web性能优化方面,我们除了优化缓存设计之外,也需要尽量减少对服务器的http请求,包括之前提到的延迟加载,动态合并js/css文件等方法,希望对初学者有所帮助。
以上是个人学习之路的简单分享,不足之处欢迎大神们指正!
技术类公众号推荐:CodeL

应用程序Cache对象到高性能Memcached学习之路的更多相关文章
- 转: 一个程序员的Java和C++学习之路(整理)
http://blog.csdn.net/ajian005/article/details/8003655 http://m.blog.csdn.net/xugangwen/article/detai ...
- Memcached 学习笔记(二)——ruby调用
Memcached 学习笔记(二)——ruby调用 上一节我们讲述了怎样安装memcached及memcached常用命令.这一节我们将通过ruby来调用memcached相关操作. 第一步,安装ru ...
- 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问
中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...
- memcached学习笔记——存储命令源码分析上篇
原创文章,转载请标明,谢谢. 上一篇分析过memcached的连接模型,了解memcached是如何高效处理客户端连接,这一篇分析memcached源码中的process_update_command ...
- NVIDIA TensorRT高性能深度学习推理
NVIDIA TensorRT高性能深度学习推理 NVIDIA TensorRT 是用于高性能深度学习推理的 SDK.此 SDK 包含深度学习推理优化器和运行时环境,可为深度学习推理应用提供低延迟和高 ...
- zz 游戏程序员的学习之路(中文版)
游戏程序员的学习之路(中文版) Milo Yip · 1 天前 感谢 @楚天阔(tkchu)编写脚本及整理中文译本数据,自动从英文版生成中文版,SVG / PDF 版本中的书籍图片现在链接至豆瓣页面. ...
- memcached学习笔记6--浅谈memcached的机制 以及 memcached细节讨论
附:请浅谈memcached的机制 答: ①基于C/S架构,协议比较简单 c/s架构,此时memcached为服务器端,我们可以使用如PHP,c++/c等程序连接memcached服务器. memca ...
- memcached 学习 1—— memcached+spring配置
memcached 学习目录: memcached 学习 1—— memcached+spring配置 这几天自己搭建项目环境,解决问题如下: 有关常见的配置这里没有列出,中间遇到的搭建问题比较顺利g ...
- memcached学习笔记——存储命令源码分析下篇
上一篇回顾:<memcached学习笔记——存储命令源码分析上篇>通过分析memcached的存储命令源码的过程,了解了memcached如何解析文本命令和mencached的内存管理机制 ...
随机推荐
- 15个优秀的 Material Design(材料设计)案例
Material Design (材料设计)是由谷歌创建和设计的一种设计语言,结合成功的设计的经典原则以及创新科技.谷歌的目标是开发一个设计系统,让所有的产品在任何平台上拥有统一的用户体验.全新的设计 ...
- javascript --- 原型初探七日谈(一)
在javascript中,像原型,闭包这样的概念,只要我们能领悟其中的原理,一切都会显得格外清晰与明了. 原型属性(prototype): 下面我们简单定义一个函数 function her(a, b ...
- Git本地仓库
原文:http://www.cnblogs.com/wilber2013/p/4189920.html Git基本概念 在Git中,我们将需要进行版本控制的文件目录叫做一个仓库(repository) ...
- DevExtreme官方视频教程分享
收集在此,希望对使用这个工具的人有帮助 DevExtreme 1 2 3 4 5 6 DevExpress DevExtreme入门视频一:Getting Started DevExpress Dev ...
- [Android]对BaseAdapter中ViewHolder编写简化
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3642849.html 在Android项目中,经常都会用到Li ...
- 一个巧妙的实现悬浮的tableViewHeader的方法
之前因为工作需要要实现一个类似的 悬浮+视差的headerView的效果, 研究了好久没研究出来怎么做,最后用UICollectionView + CSStickyHeaderFlowLayout的方 ...
- React Native学习笔记之1
1:运行React Native报连接错误解决 解决方式: 在终端进入项目文件里,然后执行:(cd Pods/React; npm run start) 2:组件生命周期介绍 创建阶段 1. getD ...
- c中的关键字、标识符、注释
一. 学习语法之前的提醒 1) C语言属于一门高级语言,其实,所有高级语言的基本语法组成部分都是一样的,只是表现形式不太一样 2) 就好像亚洲人和非洲人,大家都有人类的结构:2只 手.2只脚.1个头, ...
- android Gui系统之WMS(2)----窗口的添加
Android系统很多,但是最常用的就两类,一类是有系统进场管理的,系统窗口.还有一类就是由应用程序产生的,应用窗口. 1.系统窗口的添加流程 1.1 addStatusBarWindow Phone ...
- github代码上传之命令提交
Git GUI的用法比较简单,随便弄弄就可以将本地git库中的代码提交到远端github服务器,所以想把Git bash这玩意儿的操作流程快速过一遍,主要是做个笔记,以后忘记了可以看看怎么操作的. 首 ...