什么是缓存?缓存优点?为什么要使用缓存?不同场景下缓存的作用?内存缓存淘汰机制?

目录

Redis专栏目录(点击进入…)

什么是缓存?缓存优点?为什么要使用缓存?不同场景下缓存的作用?内存缓存淘汰机制?

目录什么是缓存?为什么要使用缓存?什么是缓存?为什么要使用缓存?缓存优点(1)降低冗余的数据传输(2)降低带宽瓶颈(3)降低瞬间拥塞(4)降低距离时延

缓存缺点(1)缓存没有清理机制(2)给开发带来的困扰

缓存分类(1)数据库数据缓存(2)服务器缓存(代理服务器缓存)(3)CDN缓存(4)浏览器端缓存(5)Web应用层缓存

不同场景下缓存的作用?内存缓存淘汰机制(1)FIFO(First In,First Out):先进先出(2)LFU(Least Freauently Used):不常使用清理掉,留给经常使用的使用(3)LRU(Least Recently Used):喜新厌旧

什么是缓存?为什么要使用缓存?

什么是缓存?

当应用要读取数据时,会首先从缓存查询数据,有则直接执行,不存在时从数据库中查找,由于缓存的数据比数据库操作IO快的多,所以缓存的作用就是帮助软件更快的获取数据运行

缓存原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器

缓存是指可以进行高速数据交换的存储器,它先于内存与CPU交换数据,因此速率很快;缓存的设置是所有现代计算机系统发挥高性能的重要因素之一

为什么要使用缓存?

因为在项目中,有一些数据在一段时间内不会修改,就将它缓存起来,提高访问的速度。

缓存优点

(1)降低冗余的数据传输

缓存减少了冗余的数据传输,节省了网络费用 有很多客户端访问一个流行的原始服务器页面时,服务器会多次传输同一份文档,每次传送给一个客户端,一些相同的字节会在网络中一遍遍地传输,这些冗余的数据传输会耗尽昂贵的网络带宽,降低传输速度,加重Web服务器的负载。有了缓存,就可以保留第一条服务器响应的副本,后继请求就可以由缓存的副本来应对了,这样可以减少那些流入/流出原始服务器的,被浪费掉了的重复流量

(2)降低带宽瓶颈

缓存缓解了网络瓶颈的问题,不需要更多的带宽就能够更快地加载页面

缓存还可以缓解网络的瓶颈问题,很多网络为本地网络客户端提供的带宽比为远程服务器提供的带宽要宽,客户端会以路径上最慢的网速访问服务器,如果客户端从一个快速局域网的缓存中得到了一份副本,那么缓存就可以提高性能,尤其是要传输比较大的文件时

什么是网络带宽? 网络带宽是指在单位时间(一般指的是1秒钟)内能传输的数据量。网络和高速公路类似,带宽越大,就类似高速公路的车道越多,其通行能力越强。网络带宽作为衡量网络特征的一个重要指标,日益受到人们的普遍关注。它不仅是政府或单位制订网络通信发展策略的重要依据,也是互联网用户和单位选择互联网接入服务商的主要因素之一

所谓带宽,是“频带宽度”的简称,原是通讯和电子技术中的一个术语,指通讯线路或设备所能传送信号的范围。而网络中的带宽是指在规定时间内从一端流到另一端的信息量,即数据传输率。带宽对模拟信号和数字信号有两种基本的应用,在本文中所说的带宽均是指数字信号

Joe的五金商店旧金山分店的用户通过1.4Mbit/s的T1因特网连接,从亚特兰大总店下载一个5MB的库存文件要花30秒的时间;如果在旧金山分店里缓存了这个文档,本地用户通过以太网连接只要花费不到1秒的时间就可以获得同一份文档了

(3)降低瞬间拥塞

缓存降低了对原始服务器的要求,服务器可以更快地响应,避免过载的出现。

缓存在破坏瞬间拥塞时显得非常重要,突发事件(比如爆炸性新闻,批量E-mail公告,或者某个名人事件)使很多人几乎同时去访问一个Web文档时,就会出现瞬间拥塞(见图)由此造成的过多流量峰值可能会使网络和Web服务器产生灾难性的崩溃

(4)降低距离时延

缓存降低了距离时延,因为从较远的地方加载页面会更慢一些

即使带宽不是问题,距离也可能成为问题,每台网络路由器都会增加因特网流量的时延,即使客户端和服务器之间没有太多的路由器,光速自身也会造成显著的时延

比如:波士顿到旧金山的直线距离大约有2700英里,在最好的情况下以光速传输 (186000英里/秒)的信号可以在大约15毫秒内从波士顿传送到旧金山,并在30毫秒内完成一个往返! 假设某个 Web页面中包含了20个小图片,都在旧金山的一台服务器上,如果波士顿的一个客户端打开了4条到服务器的并行连接,而且保持着连接的活跃状态,光速自身就要耗费大约1/4秒(240毫秒)的下载时间(见图) 如果服务器位于(距离旧金山6700英里的)东京,时延就会变成600毫秒,中等复杂的 Web页面会带来几秒钟的光速时延。将缓存放在附近的机房里可以将文件传输距离从数千英里缩短为数十米

缓存缺点

(1)缓存没有清理机制

这些缓存的文件会永久性地保存在机器上,在特定的时间内,这些文件可能是帮了大忙;但是时间一长,已经不再需要浏览之前的这些网页,这些文件就成了无效或者无用的文件,它们存储在用户硬盘中只会占用空间而没有任何用处,如果要缓存的东西非常多,那就会撑暴整个硬盘空间

(2)给开发带来的困扰

明明修改了样式文件、图片、视频或脚本,刷新页面或部署到站点之后看不到修改之后的效果,所以在产品开发的时候总是想办法避免缓存产生

缓存分类

(1)数据库数据缓存

社交网络服务类型的应用,往往关系比较复杂,数据库表繁多;如果频繁进行数据库查询,很容易导致数据库不堪重荷,为了提供查询的性能,会将查询后的数据放到内存中进行缓存,下次查询时,直接从内存缓存直接返回,提供响应效率,常用的缓存方案有memcached、redis等

(2)服务器缓存(代理服务器缓存)

代理服务器是浏览器和源服务器之间的中间服务器,浏览器先向这个中间服务器发起Web请求,经过处理后(权限验证、缓存匹配等),再将请求转发到源服务器,代理服务器缓存的运作原理跟浏览器的运作原理差不多,只是规模更大,可以把它理解为一个共享缓存,不只为一个用户服务,一般为大量用户提供服务,因此在减少相应时间和带宽使用方面很有效,同一个副本会被重用多次,常见代理服务器缓存解决方案有Squid、Nginx、Apache等

(3)CDN缓存

CDN(Content delivery networks)缓存,也叫网关缓存、反向代理缓存。CDN缓存一般是由网站管理员自己部署,为了让网站更容易扩展并获得更好的性能,浏览器先向CDN网关发起Web请求,网关服务器后面对应着一台或多台负载均衡源服务器,会根据它们的负载请求,动态将请求转发到合适的源服务器上

(4)浏览器端缓存

浏览器缓存根据一套与服务器约定的规则进行工作,在同一个会话过程中会检查一次并确定缓存的副本足够新,如果在浏览过程中,比如前进或后退,访问到同一个图片,这些图片可以从浏览器缓存中调出而即时显现

(5)Web应用层缓存

应用层缓存指的是从代码层面上,通过代码逻辑和缓存策略,实现对数据、页面、图片等资源的缓存,可以根据实际情况选择将数据存在文件系统或者内存中,减少数据库查询或者读写瓶颈,提高响应效率

不同场景下缓存的作用?

场景作用操作系统磁盘缓存减少磁盘机械操作数据库缓存减少文件系统IO应用程序缓存减少对数据库的查询Web服务器缓存减少应用服务器请求客户端浏览器缓存减少对网站的访问

内存缓存淘汰机制

(1)FIFO(First In,First Out):先进先出

这是最简单、最公平的一种思想;如果一个数据是最先进入的,那么可以认为在将来它被访问的可能性很小,空间满的时候,最先进入的数据会被最早置换(淘汰)掉。

(2)LFU(Least Freauently Used):不常使用清理掉,留给经常使用的使用

是一种常见的缓存算法,设计思想是如果一个数据在最近一段时间很少被访问到,那么可以认为在将来它被访问的可能性也很小,因此,当空间满时,最小频率访问的数据最先被淘汰

(3)LRU(Least Recently Used):喜新厌旧

在很多分布式缓存系统(Redis、Memcached)中都有广泛使用,如果一个数据在最近一段时间没有被访问到,那么可以认为在将来它被访问的可能性也很小。因此,当空间满时,最久没有访问的数据最先被置换(淘汰)