开发者学堂课程【Java面试疑难点串讲2:缓存】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/25
缓存
1、缓存问题
对于整个电脑而言,它有一个自己的固定状态,如果要读取数据。
流程:将硬盘上的内容直接加载到内存里面,然后再通过内存进行读取。因为硬盘上所保存的都是物理上的二进制数据。
如果你的电脑只是你一个人在使用,那么没有任何的问题。这个时候,你会发现当人一多的时候,你的电脑就会变得跟蜗牛跑步一样。非常的慢。
如果只是你一个人在使用,那么慢一点感觉不到,可是如果换到了公网上,一堆的用户要进行数据读取的时候,现在的事情就出现了,所有的操作如果通过数据库查询得到(物理磁盘上),那么速度就会非常的慢,假如说一个查询需要60ms的时间,这个时间在人一多会呈指数倍增长。
所以有些人就开始想如何可以减少这种操作所带来的延迟时间的增长呢?
于是有人提出:我们不使用普通的硬盘全部换固态硬盘(速度可以提升,但是价格也提升)。固态硬盘不禁用。
如果我不是土豪,无法缩短内存与磁盘间的读取的延迟,那么这个时候怎么办?
那么唯一的解决方案是不读取硬盘上的内容。速度就会非常的快了。可是这种做法就有三种实现模式:(CMS)直接使用内存作为缓存,也就是说将所读取出来的数据保存在内存里面(数据的失效问题)、使用缓存数据库(Redies、Memcached、NoSQL数据库)。
而对于内存缓存而言,有两种常用的组件:oscache(是在页面上使用,例如:需要在某一个JSP页面之中缓存一个对象的时候使用)、ehcache(是在一些开发框架之中出现,例如:Hibernate、Mybatis、Shiro)。
即:缓存的本质=减少物理磁盘的读取时间(延迟取消了),直接读内存,还需要进行一些合理的内存管理。