Hibernate一级缓存二级缓存

    缓存的目的是为了通过减少应用程序对物理数据源访问的次数来提高程序运行的效率,原理则是把当前或接下来一段时间可能会用到的数据保存到内存中,在使用时直接从内存中读取,而不是从硬盘中去读取,简单来说,缓存就是数据库中数据在内存中的“临时容器。
    在 Hibernate中,缓存用来把从数据库中查询出来的和使用过的对象保存在内存中,以便在后期需要用到这个对象时可以直接从缓存中来获取这个对象(只有当该对象在缓存中不存在时才会去数据库中查询)。显然,由于避免了因大量发送SqL语句到数据库查询导致的性能损耗,缓存机制可以显著提高程序的运行效率。
    在 Hibernate中有一级缓存与二级缓存的概念,一级缓存由 session来管理,二级存由sessionfactory来管理。在使用时,二级缓存是可有可无的、但一级缓存是必不可少的。
    一级缓存使用的场合如下:当使用 Session查询数据时,首先会在该 Session内部查找该对象是否存在,若存在,则直接返回,否则,就到数据库中去查询,并将查询的结果缓存起来以便后期使用。一级缓存的缺点就是当使用 Session来表示一次会话时,它的生命周期较短,而且它是线程不安全的,不能被多个线程共享,因此,在实际使用时,对效率的提升不是非常明显。
    鉴于以上原因,二级缓存的概念被引引入了。二级缓存用来为 Hibernate配置一种全局的缓存、以便实现多个线程与事务共享。在使用了二级缓存机制后,当查询数据时,会首先在内部缓存中查找,如果不存在,接着在二级缓在中在找,最后才去数据库中査找。
    当然,二级缓存除了以内存作为存储介质外,还可以选用硬盘等外部存储设备。
    合理地使用 Hibernate的二级缓存机制有助于提高系统的运行效率,但如果使用得不合理,不仅不会提高效率,反而有可能会降低系统的性能。
二级缓存一般适用于以下几种情况:
1)数据量较小。如果数据量太大,缓存太多,会消耗大量内存,造成内存资源短缺,从而降低系统的性能。
2对数据的修改较少,如果进行大量的修改,就需要频繁地对缓存中数据与数据库中的数据进行同步,而这也会影响系统的性能。
3)不会被大量的应用共享的数据。如果数据被大量线程或事务共享,多线程访问时的同步机制也会影响系统的性能。
4)不是很重要的数据。如果查询的数据非常重要(例如财务数据),对对数据的正确性要求非常高,最好不要使用二级缓存。


JAVA三大框架用来做WEB应用。 struts主要负责表示层的显示 spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作) hibernate主要是数据的持久化到数据库 


猜你喜欢

转载自blog.csdn.net/qiuchaoxi/article/details/80250898