zoukankan      html  css  js  c++  java
  • hibernate入门五之hibernate缓存

    什么是缓存?

    • 并不是指计算机的内存或者cpu的一二级缓存
    • 缓存是指为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能的一种策略

    为什么使用缓存?

    • ORM框架访问数据库的效率直接影响程序运行的速度,提升和优化ORM框架的执行效率至关重要。

    • Hibernate的缓存是提升和优化hibernate执行效率的重要手段,所以学会hibernate缓存的使用和配置是优化的关键

    缓存的一般的工作原理

    一级缓存

    • hibernate一级缓存又称之为“session缓存”、“会话级缓存”
    • 通过session从数据库查询实体时会把实体在内存中存储起来,下一次查询同一实体时不在从数据库中获取,而从内存中获取,这就是缓存
    • 一次缓存和的生命周期和session相同;session销毁,它也销毁
    • 一级缓存中的数据可适用范围在当前会话之内
    • 在不同的session多次查询同一数据,会执行多次数据库查询
    • 一级缓存中,持久化化的每个实例都具有唯一的OID

    一级缓存API(一级缓存无法取消,用两个方法管理)

    1. evict(),用于将某个对象从session的一级缓存中清除
    2. clear(),用于将一级缓存中的所有对象全部清除

    一级缓存有时候对于程序的性能产生影响

    public class SessionTest {

    /**
    * @param "测试一级缓存"
    */
    public static void main(String[] args) {
    Session session = HibernadUtil.getSession();
    // Students students = session.get(Students.class, 31);
    // System.out.println(students.getSname());
    //
    // //session.evict(students);// 清除缓存
    // session.clear();// 清除所有缓存

    //Session session1 = HibernadUtil.getSession(); //新的session
    // students = session.get(Students.class, 31);
    // System.out.println(students.getSname());

    Query query = session.createQuery("from Students ");
    List<Students> list = query.list();
    for (Students student : list) {
    System.out.println(student);
    }

    /*list不会用到当前会话中的session,依然会从数据库中查找*/
    // list = query.list();
    // for (Students student : list) {
    // System.out.println(student);
    // }

    /*
    *干掉
    * List<Students> list = query.list();
    // for (Students student : list) {
    // System.out.println(student);
    // }
    * 从雇员表中查取学生编号,如果在缓存中找到了,从缓存中拿,否则从缓存中拿
    * */
    Iterator iterator = query.iterate();
    while (iterator.hasNext()) {
    Object student = (Students) iterator.next();
    System.out.println(((Students) student).getSname());

    }

    session.close();
    }
    }

    二级缓存

    有些常用的数据,在一个session中缓存以后,我们希望在其他session中能够直接使用,而不用在次缓存怎么办?这时,我们的二级缓存就登场了!
    二级缓存的配置步骤(默认不自动开启):

    • 二级缓存又称为“全局缓存”、“应用级缓存”
    • 二级缓存中的数据可适用范围是当前应用的所有会话
    • 二级缓存是可插拔式缓存,默认是ehcache,还支持其他的二级缓存:Hashtable,OSCache、等等

    1、导入架包(ehcache及它所依赖的架包,版本根据自己的情况选)

    2、配置ehcache.xml文件(可以hibernate的etc中获取)

    3、在跟文件hibernate.cfg.xml指定二级缓存的入口

    4、在指定实体类的hbm.xml中开启二级缓存

    什么时候使用二级缓存?

    • 很少被修改的数据
    • 不是很重要的数据,允许偶尔出现并发的数据
    • 不会被并发访问的数据
    • 参考数据

    一级缓存和二级缓存的对比和总结

  • 相关阅读:
    setState 是异步吗?
    React优化点滴
    JS原型,作用域,this,闭包
    Webpack 模块化打包优化
    JS异步编程
    Web网络安全
    Http2.0和Http3.0
    Http协议基础
    Harris算子以及未来的规划...
    剑指offer 二维数组查找
  • 原文地址:https://www.cnblogs.com/lindaiyu/p/11001363.html
Copyright © 2011-2022 走看看