Hibernate缓存

Hibernate缓存的做用(即为何要用缓存机制),而后再具体说说Hibernate中缓存的分类状况,
最后能够举个具体的例子。
Hibernate缓存的做用:
    Hibernate是一个持久层框架,常常访问物理数据库,为了下降应用程序对物理数据源访问的频次,
    从而提升应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时
    从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据
Hibernate缓存分类:
  Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存
  Hibernate一级缓存又称为“Session的缓存”,它是内置的,不能被卸载(不能被卸载的意思就是这
  种缓存不具备可选性,必须有的功能,不能够取消session缓存)。因为Session对象的生命周期一般
  对应一个数据库事务或者一个应用事务,所以它的缓存是事务范围的缓存。第一级缓存是必需的,不
  容许并且事实上也没法卸除。在第一级缓存中,持久化类的每一个实例都具备惟一的OID。 
Hibernate二级缓存又称为“SessionFactory的缓存”,因为SessionFactory对象的生命周期和应用程
  序的整个过程对应,所以Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,
  所以须要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。第二级缓存是可选的
  ,是一个可配置的插件,在默认状况下,SessionFactory不会启用这个插件。

什么样的数据适合存放到第二级缓存中?   
1 不多被修改的数据   
2 不是很重要的数据,容许出现偶尔并发的数据   
3 不会被并发访问的数据   
4 常量数据   
不适合存放到第二级缓存的数据?   
1常常被修改的数据   
2 .绝对不容许出现并发访问的数据,如财务数据,绝对不容许出现并发   
3 与其余应用共享的数据。 

Hibernate查找对象如何应用缓存?
当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,若是配置了二级缓存
,那么从二级缓存中查;若是都查不到,再查询数据库,把结果按照ID放入到缓存删除、更新、增长数
据的时候,同时更新缓存

Hibernate管理缓存实例
不管什么时候,咱们在管理Hibernate缓存(Managing the caches)时,当你给save()、update()或
saveOrUpdate()方法传递一个对象时,或使用load()、 get()、list()、iterate() 或scroll()方法
得到一个对象时, 该对象都将被加入到Session的内部缓存中。 
当随后flush()方法被调用时,对象的状态会和数据库取得同步。 若是你不但愿此同步操做发生,或
者你正处理大量对象、须要对有效管理内存时,你能够调用evict() 方法,从一级缓存中去掉这些对
象及其集合。