什么是Hibernate的二级缓存?
(1)什么是缓存?
缓存的目的是通过减少应用程序对于物理数据库的访问次数,来提高程序的运行效率。
原理就是把当前或者接下来一段时间可能会用到的数据保存到内存中,在使用时,直接从内存中读取数据,而不是访问数据库读取。简单来说,缓存就是一个内存中的“临时容器”。
Hibernate中有一级缓存和二级缓存的概念。一级缓存由Session来管理,二级缓存由SessionFactory来管理。使用时,二级缓存是可有可无的,一级缓存是必不可少的。
(2)一级缓存?
一级缓存的使用场景:
当使用Session查询数据的时候,首先会在Session对象内部查询对象是否存在,如果存在,则直接返回,否则直接去数据库查询,并将查询结果缓存起来以备以后使用。
一级缓存的缺点:
使用Session来表示一次会话时,它的生命周期比较短,而且他是线程不安全的,不能被多个线程共享。因此在使用的时候,对效率的提升不是很明显。
(3)二级缓存?
二级缓存用来为Hibernate配置一种全局的缓存,以便实现多个线程与事务共享。在使用了二级缓存机制后,当查询数据之后,会首先在内部缓存中查找,如果不存在,就在二级缓存中查找,最后才会到数据库中查找。
与一级缓存相比,二级缓存是独立于Hibernate的软件部件,属于第三方的产品,常见的有EhCache,可以根据需求配置二级缓存插件来实现二级缓存的功能。
合理的使用二级缓存可以提高系统的运行效率,但是使用不合理不仅不会提高效率,还会降低系统的性能。
二级缓存一般适用于以下几种情况:
(1)数据量较小。
数据量太大会占用大量内存,降低系统性能。
(2)对数据的修改较少。
如果进行大量的修改,就需要频繁的对缓存数据与数据库的数据进行同步,影响系统性能。
(3)不会被大量应用共享的数据。
如果数据被大量的线程或者事务共享,多线程的访问也会造成系统性能下降。
(4)不是很重要的数据。
如果查询的数据非常重要,比如说财务数据,对数据的正确性要求特别高,就不适合用二级缓存。