缓存:就是数据交换的缓冲区(Cache),先于内存与CPU交换数据,因此速率很快,当某一硬件要读取数据是,会首先从缓存中查找需要的数据,如果能找到则直接执行,如果找不到则从内存中找,由于缓存的运行速度比内存块的多.故缓存的作用就是帮助硬件更快的运行.
缓存的范围分类
应用程序中根据缓存的范围,将缓存分为三类
(1)事务范围缓存—一级缓存,session缓存,只能被单钱事务访问,缓存的生命周期依赖于事务的生命周期.当事务结束时,缓存的生命周期同时结束.事务范围的缓存可以使用内存作为存储介质..
Hibernate的一级缓存属于应用范围缓存
(2)应用范围缓存,可以被应用程序内的所有事务共享访问,缓存的生命周期依赖于应用的生命周期.当应用结束时,缓存的生命周期同时结束.应用范围的缓存可以使用内存或硬盘作为存储介质.
Hibernate的二级缓存属于应用范围缓存
(3)集体范围缓存
集体范围缓存,是多SessionFactory缓存,在集群环境中,缓存被一个机器或多个机器的进程共享,缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信保证缓存中数据的一致性.
缓存中的数据通常采用对象的松散数据形式,有些Hibernate的二级缓存的第三方插件支持集群范围缓存.
一级缓存
一级缓存就是Session缓存,(内存中的一块空间:内存中存在相互关联的Java对象)
session缓存是事务级缓存,有hibernate管理,是hibernate内置的,不能被程序员取消.
当程序调用Session的load()方法,get()方法,save()方法,saveOrUpdate()方法,update()或者Query()接口方法是,hibernate会对实体对象进行缓存.
通过get()或者load()方法查询实体对象,先去缓存中查找,如果找不到实体对象的情况下,发起SQL语句去数据进行查询.