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

    Hibernate的对象三种状态

    1.瞬时状态 Transient

    持久化对象没有id,而且没有和session关联

    2.持久状态 persistent

    持久化对象有id,而且跟session有关联

    3.游离状态(托管状态) detached

    持久化对象有id,但是跟session没有关联

    Hibernate缓存

    1.缓存概念

         1.缓存就是一块内存区域。介于应用程序和物理数据源(例如:电脑磁盘)之间
         2.提高程序的运行速率, 从而提高了用户的体验度。
         3.缓存就是目标数据源的一个复本(复制)。应用程序直接访问缓存。一般会在特定时间刷新缓存。

    2.Hibernate缓存

    持久化层(dao层),对数据(操作的数据库中的数据)的备份

    2.1 Hibernate一级缓存(Session级别)
    Session级别的缓存:Hibernate内置的,不能卸除。如果session关闭了,缓存就清空了。
    ​
    适用情况: 一次业务功能操作内有多次操作数据库。只访问一次,后续访问的是缓存数据。
    
    案例1:以查询为例:
    结论:
         使用session多次查询。只要查询都会将查询的结果存储到缓存区域。那下次再查询直接从缓存中查找,找到就直接获取,没有找到再次发起sql去连接数据库查询
    
    案例: 快照
    快照也是一块内存区域。快照是session缓存中一部分。
    快照的目的是在提交事务的时候,会比较缓存和快照内容。
    2.2Hibernate实现二级缓存的步骤:
     1.添加二级缓存的包(下载的库/lib/optional/ehcache/xx.jar(3个))
     2.在主配置文件(hibernate.cfg.xml)配置开启二级缓存
        <!--配置开启二级缓存  -->
         <property name="hibernate.cache.use_second_level_cache">true</property>
     <!-- 指定使用哪个二级缓存(Hibernate二级缓存有5种实现,Ehcache常用的一种) --> 
       <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property> 
       3.配置缓存的配置文件 ehcache.xml(hibernate提供了,开发者只需要根据自己的需求更改缓存目录及内容即可)
       ehcache.xml该文件的位置:hibernate下载的库/project/etc/ehcache.xml
             关键代码如下:
                 <!--配置缓存的磁盘目录(该目录要存在)  -->
                  <diskStore path="C:hibernatecache"/>
     
                    <!-- name:指明要缓存的持久化类:包名+类名 -->
                    <cache name="com.qf.domain.Customer"
                        maxElementsInMemory="10000"
                        eternal="false"
                        timeToIdleSeconds="300"
                        timeToLiveSeconds="600"
                        overflowToDisk="true"
                        />
    ​
    4.在缓存的持久化类映射的地告诉程序缓存的策略
               ready-only  默认的,常用的,缓存数据无需修改,只需要读取即可。
               read-write  需要修改缓存数据,常用于对缓存进行读和写。数据库隔离级别不能为serializable(可串行化)
               notstrict-read-write 只是偶尔更新数据。(示例:两个事务同时更新一条数据,非常该策略。)
               transaction:ehcache不支持。
        示例:以下配置映射文件中的class的里面
        <!--设置缓存策略  -->
          <cache usage="read-only"/>
         5.验证测试:
    
     二级缓存和一级缓存的关系:
      默认使用一级缓存,当一级缓存不存在的情况下,去读取二级缓存。
      可以认为:二级缓存是一级缓存的补充。
     
    重要的信息优先在一级缓存存储,不太重要的信息在二级缓存。
     二级缓存通常用于什么情况?
      不太重要的信息。
     很少被修改的数据。
       常量数据。   
      补充:一级缓存Session级别.如何清除一级缓存: 
       1.evict(Object o) 
        2.clear() 
        3.close()    
        二级缓存SessionFactory级别,如何清除二级缓存:
       1.sessionFactory.close()   
       2.把缓存文件删除(不建议)
  • 相关阅读:
    c#使用selenium过滑动验证码
    C#构建数据类型不同的链表
    【疑难杂症】c#控制台应用程序卡输出
    只需三步,轻松体验office2019
    一文搞定C#.Net如何调用/交互Javascript
    逆向某微信小程序参数签名算法
    win10 IIS疑难杂症--处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误模块“ManagedPipelineHandler”
    一台手机如何在微信语音/视频通话时把声音录下来
    android端日志查看调试利器Logcat Reader
    [开源]安卓调试神器-获取最上层Activity:TopActivity
  • 原文地址:https://www.cnblogs.com/a77355699/p/7905919.html
Copyright © 2011-2022 走看看