zoukankan      html  css  js  c++  java
  • hibernate缓存说明

    hibernate缓存说明:
    1.一级缓存(session级别缓存)
         一级缓存,不是用来提升性能,是用来处理事务的
    2.二级缓存(sessionFactory级别缓存):
         二级缓存,对所有的session都有效,生命周期与sessionFactory相同,在项目启动时创建,项目关闭时销毁,是为了提升性能
         hibernate查询策略:Hibernate有2中查询机制:
         2.1 session
              session.save() update() delete() get() load()
              session方式每次执行一条记录,默认不用配置就支持二级缓存,因此,read-only 对session是有效的。
              在session中如果hibernate.cfg.xml中配置了read-only,则update()和delete()会操作失败,save()、get()和load()操作成功。
         2.2 HQL
              HQL方式用来执行对条记录:list() executeUpdate()
              二级缓存配置read-only,对HQL默认是无效的
              注意:HQL中没有save方法
     
    -----------------------------------配置二级缓存说明-----------------------------------------
    1.首先,工程中加入ehcache-xxx.jar包

    2.(简单配置)然后,在hibernate.cfg.xml中添加下面配置:
    // -- 配置二级缓存提供商EhCache,此处并不是缓存的jar包,而是缓存jar包的索引属性 --
    <!-- 配置二级缓存 提供商EhCache,此处并不是缓存的jar包,而是缓存jar包的索引属性 -->
            <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
    <!-- 配置哪些类支持缓存 -->
            <class-cache usage="read-only" class="com.ssh.shop.model.Product"/>
     
    3.(高级配置)再然后,从ehcache.jar包中找到ehcache-failsafe.xml文件,复制内容,然后在src目录下面新建ehcache.xml,将内容粘贴进去,修改里面的eh缓存参数:
     
    <ehcache>
        <!-- 如果缓存内存溢出,则存储到硬盘 -->
        <diskStore path="java.io.tmpdir"/>
    
        <!-- 
            <defaultCache
                maxElementsInMemory="10000"        :内存支持的最大对象数量
                eternal="false"                    :对象是否永久有效,建议为false,这样下面的参数才有效
                timeToIdleSeconds="60"            :对象间隔周期(单位:秒),当在该周期内对象没有被访问,自动销毁
                timeToLiveSeconds="120"            :对象生命周期(单位:秒)
                overflowToDisk="true"            :是否支持溢出到硬盘
                diskPersistent="false"            :非web
                diskExpiryThreadIntervalSeconds="120"    :非web
                memoryStoreEvictionPolicy="LRU"            :对象替换策略     
                                                            1.FIFO(先进先出,已淘汰)    
                                                            2.LRU(最近最少策略,忽略访问频率,最早访问的会被替换)    
                                                            3.LFU(最近最未使用测试,忽略访问先后时间,访问最少的会被替换):首页数据经常访问的不应该被替换,使用该策略
                />
         -->
        <defaultCache
                maxElementsInMemory="10000"
                eternal="false"
                timeToIdleSeconds="60"
                timeToLiveSeconds="120"
                overflowToDisk="true"
                diskPersistent="false"
                diskExpiryThreadIntervalSeconds="120"
                memoryStoreEvictionPolicy="LFU"
                />
    </ehcache>
     

    这样,在查询商品类的时候,刷新或者重新载入,都不会查询数据库,而是查询缓存
    逃避不一定躲得过,面对不一定最难过
  • 相关阅读:
    理想解法
    IEEExtreme 2021
    day_1-python前期学习准备篇
    电梯模拟C++
    java线程_01——————————HelloWorld例子
    Unknown tag (c:forEach) 未知的标签
    自动生成Junit单元测试的插件 CodeProAnalytix
    Log4j笔记----01
    Springboot学习笔记_helloWorld篇
    支持开源,崇尚技术,追求真理,充实人生
  • 原文地址:https://www.cnblogs.com/yangzhenlong/p/5105592.html
Copyright © 2011-2022 走看看