楼上的缓存技术解释的很好,我再补充几句。缓存有前端缓存,应用缓存,数据库缓存......前端缓存是前端web服务的缓存,保证同一个页面在并发的时候不请求后端,直接从前端返回。cdn缓存,页面缓存等都是前端缓存。这个功能不仅仅是能提高系统的吞吐量,访问的速度,还可以防止一些恶意的网络攻击。应用缓存呢我们在程序中加入的缓存,有分布式的缓存,本地缓存和中心缓存,一般都会使用本地缓存和分布式/中心 缓存结合起来使用。是为了防止频繁访问数据库而做的数据缓存,由应用自行管理。还有数据库缓存,这种缓存是由数据库来管理的。
把你的钱放在口袋里,用的时候直接从口袋里取,而不用每一笔钱都从银行提款。
对于web来说,缓存就是把常用的而且不常改的数据(有专门的缓存算法和缓存策略确定要缓存哪些数据)保存在本地内存或者硬盘上,不用每次都从服务器取数据。因为从服务器取数据所需的网络开销是很大的(比从本地硬盘读数据还要慢)。因此,恰当的使用缓存技术可以极大的提高系统性能。
拿hibernate来说:
一级缓存为session级别的缓存,为hibernate内置缓存,你从数据库取数据的时候会先去一级缓存上找。如果找到,则不会从数据库中存,否则从数据库中取。一级缓存会在session关闭时自动清除,一个session访问不到另一个session缓存的数据。
二级缓存为SessionFactory级别的缓存,要使用第三方二级缓存组件,不同session可以共享二级缓存中的数据,即一个session可以访问到另一个session缓存的数据。
查询缓存就是hql或sql语句要相同,否则无法命中数据。