Hibernate的二级缓存

时间:2021-05-07 00:48:15

1.什么是缓存?

缓存就是把以前从数据库查询出来和使用过的对象保存在内存中(一个数据结构中),该数据结构通常是HashMap或类似HashMap,当以后要使用某个对象时,先查询缓存中是否有这个对象,如果有则使用缓存中的对象,如果没有,则查询数据库,并把查询出来的对象保存到缓存中,以便下次使用。

2.为什么要有二级缓存?

Hibernate的Session是一种缓存,叫做一级缓存,当想使用Session从数据库中查询某个对象时,Session也是先从自己内部查看此对象是否存在,如果存在则返回对象,如果没有则去查询数据库,并将结果保存在自己内部。由于Session代表一次会话过程,一个Session与一个数据库连接相关联,所以Session最好不要长时间保持打开(占用资源),Session通常仅用于一个事务当中,当事务结束时就应关闭,并且Session是线程不安全的,如果被多个线程共享则容易出现问题,通常只有那种全局意义上的缓存才是真正的缓存,具有更大的缓存意义,因此,Hibernate的Session缓存的作用并不明显,应用价值不大,

Hibernate的二级缓存就是为Hibernate配置一中全局缓存,让多个线程和多个事务都可以共享这个缓存,我们希望的是一个人使用过后,其他人也可以使用,Session没有这种效果。

3.如何配置?

二级缓存是独立于Hibernate的第三方软件产品,常见的有EHCache和OSCache,当Hibernate使用二级缓存的时候,首先要在Hibernate.cfg.xml中配置该产品属于哪个厂商,接着需要配置该缓存产品自己的配置文件,最后要配置哪些实体对象要纳入二级缓存的管理中。

另:一个SessionFactory可以关联一个二级缓存,即一个二级缓存只能负责缓存一个数据库中的数据,当使用二级缓存后,不要有其他的程序或SessionFactory来更改数据库中相应的数据,否则将造成缓存的数据和数据库现存储的不一致的问题。