hibernate缓存

阅读更多
为什么会有缓存?:应用程序经常访问物理数据会导致应用程序性能下降,为了提高应用程序的性能从而有了缓存。
什么是缓存?:缓存中的数据是对物理数据的复制,它会在特定的时刻或事件下同步缓存与物理数据。有了缓存之后应用程序首先从缓存中读取数据如果缓存中没有数据会去读取物理数据,并将读取的数据放入缓存,每一个持久化对象都有一个唯一的OID。
hibernate:hibernate是一个持久化层的框架。
hibernate分类:一级缓存(session缓存)和二级缓存(sessionFactory缓存)。

一级缓存:它是hibernate内置的不可卸载的。session对象的生命周期通常对应用数据库的一个事务或者一个应用程序的事务,它是事务级的。

二级缓存:它是可配置的,hibernate默认情况下没开启二级缓存。Hibernate二级缓存又称为“SessionFactory的缓存”,由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。第二级缓存是可选的,是一个可配置的插件,在默认情况下,SessionFactory不会启用这个插件。二级缓存缓存的仅仅是对象。

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

Hibernate查找对象如何应用缓存?
当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;如果都查不到,再查询数据库,把结果按照ID放入到缓存,删除、更新、增加数据的时候,同时更新缓存。Hibernate管理缓存实例无论何时,当你给save()、update()或saveOrUpdate()方法传递一个对象时,或使用load()、 get()、list()、iterate() 或scroll()方法获得一个对象时, 该对象都将被加入到Session的内部缓存中。 当随后flush()方法被调用时,对象的状态会和数据库取得同步。 如果你不希望此同步操作发生,或者你正处理大量对象、需要对有效管理内存时,你可以调用evict() 方法,从一级缓存中去掉这些对象及其集合。

你可能感兴趣的:(java,hibernate,hibernate缓存,缓存)