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

    什么是缓存:将数据提前存放到内存中的某一个位置,当再次使用的时候,可以直接从内存里获取

    缓存的好处:提升程序的运行效率,缓存技术是Hibernate的优化手段

    Hibernate分成两个基本的缓存

      1,一级缓存:session级别的缓存,一级缓存与session的生命周期一致,自带的

      2,二级缓存:sessionfactory级别的缓存,不是自带的

    证明缓存的存在:

      因为查询的是同一条记录   当第一次查询出来的时候数据就被hibernate储存到了一级缓存里

      当第二次查询时就不需要去执行sql语句到数据库查询了,直接获取缓存里的

    实例代码:

    理解一级缓存

      在session接口的实现中包含一系列的java的集合,这些Java集合构成了session的缓存

      只要session实例没有结束生命周期,存放在它缓存的对象也不会结束生命周期

      当session对象的save()方法持久化一个对象时,该对象被载入缓存,以后即使程序不调用该对象,只要缓存不清空,该对象仍处于生命周期中

      当试图get(),load()对象时,会判断缓存中是否存在该对象,有则返回,此时不查询数据库,没有再查询数据库

      Session能够在某些时间点,按照缓存中对象的变化来执行相关的sql语句,来同步更新数据库,这一过程被称为刷出缓存(flush)

      默认情况下Session在以下时间点刷出缓存:

      当程序调用Transaction的commit()方法时,该方法先输出缓存,然后再向数据库提交事务

      当应用程序执行一些查询操作时,如果缓存中持久化对象的属性已经发生了变化,会先刷出缓存,以保证查询结果能够反映持久化对象的最新状态

      调用Session的flush()方法 

        持久化对象有自动更新数据库的功能能自动更新的原因是:依赖Hibernate的一级缓存

      Hibernate向一级缓存中存入数据的同时,还会复制一份数据库存入Hibernate快照中,当调用commit()方法时,会清理一级缓存中的数据操作

      同时会检查一级缓存中的数据和快照区的数据是否相同,如果不同则会执行update()方法,将一级缓存的数据同步到数据库中,并更新快照区

      反正,则不会执行update()方法

     

  • 相关阅读:
    RT-SA-2019-005 Cisco RV320 Command Injection Retrieval
    RT-SA-2019-003 Cisco RV320 Unauthenticated Configuration Export
    RT-SA-2019-004 Cisco RV320 Unauthenticated Diagnostic DataRetrieval
    RT-SA-2019-007 Code Execution via Insecure Shell Functiongetopt_simple
    APPLE-SA-2019-3-25-1 iOS 12.2
    APPLE-SA-2019-3-25-5 iTunes 12.9.4 for Windows
    APPLE-SA-2019-3-25-6 iCloud for Windows 7.11
    APPLE-SA-2019-3-25-4 Safari 12.1
    Mybatis下的sql注入
    java代码审计中的一些常见漏洞及其特征函数
  • 原文地址:https://www.cnblogs.com/yz-bky/p/12575951.html
Copyright © 2011-2022 走看看