一 缓存类型
① CPU缓存
CPU的Cache,它中文名称是'高速缓冲存储器','读写速度'很快,几乎与CPU一样。
cache由来: 由于'CPU的运算速度'太快,内存的数据'存取速度''无法跟上'CPU的速度,所以在'cpu与内存间'设置了'cache'为cpu的'数据快取区'
+++++++++++++++'工作原理'+++++++++++++++
1)当计算机'执行程序'时,数据与地址管理部件会'预测'可能要用到的数据和指令,并将这些'数据和指令'预先'从内存中读出送到'Cache
2)一旦需要时,'先检查Cache',若有就从Cache中读取,'若无再访问内存',现在的CPU还有一级cache、二级cache、三级cache
小结: Cache就是用来'解决CPU与内存之间'速度'不匹配'的问题,避免内存与辅助内存'频繁存取'数据,这样就'提高了'系统的'执行效率'
备注: CPU的cache越大,级数越多,CPU的'访问速度'越快
'RAM'(暂时的、'动态的'存储数据,具体点就是我们通常说的'内存条')和'ROM'(永久的、'固定的'存储数据,通俗讲就是我们说的'光盘'、dvd、手机'内存卡'等)
② 磁盘缓存
③ 内存缓存
++++++++++++++'后续专门写一篇博客'++++++++++++++
应用场景: 'memcached'、'redis' -->利用'内存作为'缓存
'哪些数据'需要缓存:应该'频繁'读取 --> '热点数据'
慢设备: '磁盘'
"buffers/cached"的内存理解: 由于这块内存从'操作系统的角度'确实'被使用',但如果'用户要使用',这块内存是可以很快'被回收被用户程序使用',因此从'用户角度'这块内存应划为'空闲状态'
++++++++++++++++++'应用场景'++++++++++++++++++
1)愿意'消耗一些内存空间'来'提升速度'
2)预料某些数据会'被查询多次'以上-->'热点数据'
备注: 缓存中存放的数据'不会超过内存容量'(应用程序的本地缓存'不会'把数据存储到文件或服务器上)
④ 浏览器缓存
理解误区:'没有所谓'的'服务器缓存'和'客户端缓存',浏览器缓存'实质'是'HTTP缓存机制'
备注: 后续'专门写'一篇博客
1)浏览器缓存(Browser Caching)是为了'节约网络的资源'加速浏览
特点: 浏览器在'用户磁盘上|内存上'对'最近请求过的文档'进行存储,当访问者'再次请求这个页面时',浏览器就可以'从本地磁盘显示文档',这样就可以'加速页面的阅览',并且可以'减少服务器的压力',浏览器的缓存的数据只是'短时间'保存,可以人为的清空
备注: 一般只会缓存'静态资源' -->'html、js、css'
思考:浏览器的'默认缓存行为'?
当一个缓存中的数据被多次读取,实际上就'减少了'该数据从'慢速设备中'读取的量,这就存在某种算法去选择'什么数据需要保存在cache中',因为尽可能多的让'cache命中'能提高性能
⑤ 几个思考
思考1: 如果没有缓存?会发生什么?
思考2: 缓存能'解决'的问题
思考3: 缓存'命中率'
二 缓冲
(1)缓冲的几个通俗易懂的案例
① 倒垃圾
++++++++++++++++'倒垃圾的案例去理解缓冲区'++++++++++++++++
1)我们'倒垃圾'的时候,'不可能'一有垃圾就'直接跑去'垃圾站倒垃圾吧
2)而是'先把垃圾倒到垃圾桶','垃圾桶满了'再'一起倒'到垃圾站
备注: 其中'垃圾桶'就是这个'缓冲容器',得到'缓冲池'满了,再一起处理
说明: Java的缓冲流一样,都有一个buffer;很多'中间件'都有这个有,'目的'为了'减少io操作次数',提高效率
② 视频缓冲
③ 铁道
④ 牙签
⑤ 缓冲优势
Buffer的核心作用是'用来缓冲'-->'缓和冲击'
举例: 比如你'每秒要写100次硬盘',对'系统冲击'很大,'浪费'了'大量时间'在忙着'处理开始写和结束写'这两件事嘛
用个'buffer暂存'起来,变成每10秒写一次硬盘,对'系统的冲击'就很小,写入效率高了,日子过得爽了,极大'缓和了冲击'
'思考':没有缓冲区呢?
⑥ 缓冲区的应用
'Java字节流'的读写:'一次一个字节'、'有一个8kb的buffer' -->损耗在哪里?
⑦ 原理
三 Cache和Buffer的区别