一、缓存介绍
当我们要做某件事情或使用某个工具时,我们首先要明白为什么要做它,要解决一个什么问题?并且使用什么样的工具?生活中我们用杯子打水喝来解决口渴的问题。那么我们为什么要使用缓存,它能给我们解决什么问题呢?下面我分享一些在我们实际研发中使用缓存的经验和认识。
首先我们来对计算机存储组成原理进行一个大概认识:
如图所示:
在市场上我们发现越快的设备,存储量越小,价格反而越贵,而越慢的设备,存储量越大,价格反倒便宜。
在如今数据为王的时代,任何一家企业都希望存储更多的数据,因为数据是资产,是财富。有了数据我们可以为企业提供决策建议,为电商做精准营销,为用户做个性化定制。
在科技飞速发展的今天,用户体验得到的极大提升,用户对数据响应的要求也越来越苛刻。当用户在JD或TM下单购物时,希望能得到更快速的数据响应。JD618、TB双11拼的就是速度和用户体验,要让用户有极致流畅的感觉。
从前面的计算机存储组成图可以得知,读取寄存器和高速缓存的数据是最快的,但也是最昂贵代价最高的。所以我们不能把大量的业务数据保存到高速缓存或内存中,而放在便宜的存储设备面。把经常访问热点数据放在贵的、小的更快的缓存设备里面。
快的资源如高速缓存、内存设备都比较有限,因而不能长时间被某些数据长期霸占,本着好东西大家要一起分享的原则,大家轮流使用,所以叫缓存,也就是暂时存着。
二、缓存分类
在应用架构的初期都会比较简单,往往就是一个Tomcat,后面跟着一个数据库。
我们先看一个简单的BS架构应用。
在企业信息化系统初期,访问流量有限、并发量不大,简单的单体应用已经能满足需求,此时的架构设计是没有问题。
此时我们的业务基本做数据的交换,数据库成了单体架构应用最关键的一部分,不能宕机,也不能被大流量攻破,所以在对数据库的访问的前面需要构筑一道屏障,我们常用缓存来作为这道屏障。
我们把前面的单体架构简单分一下层:
如上图我们可以把Tomcat之前的称为接入层,包含其他调用系统,用户客户端,Tomcat之后为应用层。在接入层有相应的缓存(主要有基础设施服务提商提供的CDN服务),应用层也有缓存(重点说明)。Tomcat应用服务器本身也自带缓存,称为本地缓存。缓存一些静态资源(含js,图片,css等),用于加速并减轻后台实际web服务器的压力。