缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。
缓存的介质一般是内存,所以读写速度很快。但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质。缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存的并发访问和缓存数据的生命周期。
Hibernate中的缓存:
Hibernate中的缓存主要分为三大类:
一级缓存:
介质:内存。
生命周期:session级别。
保存对象:实体。
二级缓存:
Hibernater的二级缓存是一个插件,常用的缓存插件有EhCache,OSCache等。
介质:内存和硬盘。
生命周期:SessionFactory级别和JVM级别。
保存对象:实体。
查询缓存:
一级和二级缓存是针对于ID查询的缓存策略,对于条件查询则毫无作用。为此,Hibernate提供了针对条件查询的Query缓存。
介质:内存和硬盘。
生命周期:不固定,当关联的表发生改变时,查询缓存的生命周期结束。
保存对象:缓存普通属性的结果集和实体对象的结果集的id。