zoukankan      html  css  js  c++  java
  • Hibernate缓存

    一、什么是缓存?

    缓存是指为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能的一种策略。

    二、为什么使用缓存?

    ORM框架访问数据库的效率直接影响应用程序的运行速度,提升和优化ORM框架的执行效率至关重要。
    Hibernate的缓存是提升和优化Hibernate执行效率的重要手段,所以学会Hibernate缓存的使用和配置是优化的关键。

    三、缓存的演示,不同Session没有使用到缓存。

    四、Hibernate一级缓存

    1、Hibernate一级缓存又成为Session缓存,会话级缓存。
    2、通过Session从数据库查询实体时会把实体在内存中存储起来,下一次查询同一实体时不再从数据库获取,而从内存中获取,这即使缓存。
    3、一级缓存的生命周期是和Session相同,Session销毁,缓存也销魂。
    4、一级缓存的的数据只在当前会话内有效。

    五、一级缓存的API

    一级缓存无法取消,用两个方法管理。
    evict():用于将某个对象从Session的一级缓存中清除。
    clear():用于将一级缓存中的所有对象全部清除
    使用Query的list()方法,第二次查询内容还是会从数据库再次查询数据。所以Query.list()方法不会使用缓存。
    使用Query的iterate()方法,会从缓存中先检索是否有数据,如果没有,再进行数据库的查询。
    list和iterate的区别:
    List的获取方式为:List<Customers> list = query.list();
    Iterator的获取方式:Iterator<Customers> it = query.iterate();
    (1)因为他们获取数据的方式不一样,list()会直接查询数据库,iterator()会先到数据库中把id都取出来,然后真正要遍历某个对象的时候先到缓存中找,如果找不到,以id为条件再发一条sql到数据库,这样如果缓存中没有数据,则查询数据库的次数为n+1次
    (2)list只查询一级缓存,而iterator会从二级缓存中查
    (3)list方法返回的对象都是实体对象,而iterator返回的是代理对象

    六、二级缓存

    有些常用的数据,在一个session中缓存以后,我们希望它在其他的session中也能够使用,而不用再次缓存怎么办呢?
    这种情况下,我们就要使用更高级别的二级缓存,每个session公用的缓存。

    七、二级缓存的使用步骤:

    1、添加二级缓存对应的jar包。
    2、在Hibernate配置文件中添加Provider类的描述。
    3、添加二级缓存的属性配置文件。
    4、在需要被缓存的表所对应的映射文件中添加<cache />标签。
    具体实现:
    1、导入缓存依赖的jar包,ehcache.jar,commons-loggin.1.xxx.jar
    2、添加缓存的配置文件ehcache.xml配置文件到src目录。
    3、在hibernate.cfg.xml中添加配置信息。指定二级缓存的外部实现类。
    <property name="cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>
    4、在对应的hbm.xml文件中添加
    <cache usage="read-only" />
    cache标签的介绍:
    usage:缓存模式:
    read-only:表示只读事务模式。
    transactional:
    read-write:
    nonstrict-read-write:
    include:是否缓存延迟加载的属性
    all表示缓存所有属性。
    non-lazy:不缓存延迟加载的属性。
    region:设置了名称后可以在缓存配置文件ehcache.xml中对这个缓存进行单独配置。
    ehcache.xml
    <defaultCache
    maxElementsInMemory="10000"         //表示缓存允许创建的最大对象数。
    eternal="false"                     //表示缓存是否永久有效
    timeToldleSeconds="120"             //表示缓存的过期前的空闲时间,120秒
    timeToLiveSeconds="1200"            //表示缓存的超时时间 1200秒
    overflowToDisk="true" />            //表示缓存溢出后是否保存在硬盘上。

    八、二级二级缓存的总结:

    1、二级缓存又称为”全局缓存“,应用级缓存
    2、二级缓存中的数据可使用范围是当前所有会话。
    3、二级缓存是可插拔式缓存,默认是EHCache,还支持其他二级缓存组件:如Hashtable,OSCache,SwarmCache,JBoss TreeCache等。
    二级缓存的适用场合。
    1、很少被修改的数据。
    2、不是很重要的数据,允许出现偶尔并发的数据。
    3、不会被并发访问的数据。
    4、参考数据。

    九、一级缓存和二级缓存的对比 

  • 相关阅读:
    使用Session防止表单重复提交
    Session
    使用Cookie进行会话管理
    Java邻接表表示加权有向图,附dijkstra最短路径算法
    web工程中URL地址的推荐写法
    Web工程中各类地址的写法
    HTTP中的重定向和请求转发的区别
    squid代理
    代理服务 squid 隐藏真实ip,也就是透明代理
    docker添加sshd 服务
  • 原文地址:https://www.cnblogs.com/zhengcheng/p/5460375.html
Copyright © 2011-2022 走看看