hibernate缓存机制
来源:互联网 发布:九鼎下落知乎 编辑:程序博客网 时间:2024/05/21 05:39
hibernate的缓存机制
当谈缓存时,相信大家都会毫不犹豫额联想到计算机CPU的缓存,而hibernate这个开源框架也为我们提供了他的缓存机制:一级缓存和二级缓存
Hibernate是一个持久层框架,经常访问物理数据库。为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。
1.一级缓存
1.1 Hibernate一级缓存又称为“Session的缓存”。Session内置不能被卸载,Session的缓存是事务范围的缓存(Session对象的生命周期通常对应一个数据库事务或者一个应用事务)。一级缓存中,持久化类的每个实例都具有唯一的OID。
1.2 一级缓存存在的验证:
Session session = HibernateUtil.getSessionFactory().openSession(); Transaction tx = null; try { /*开启一个事务*/ tx = session.beginTransaction(); /*从数据库中获取id="1"的Customer对象*/ Customer customer1 = (Customer)session.get(Customer.class, "1"); System.out.println("customer.getUsername is"+customer1.getUsername()); /*事务提交*/ tx.commit(); System.out.println("**************************************"); /*开启一个新事务*/ tx = session.beginTransaction(); /*从数据库中获取id="1"的Customer对象*/ Customer customer2 = (Customer)session.get(Customer.class, "1"); System.out.println("customer2.getUsername is"+customer2.getUsername()); /*事务提交*/ tx.commit(); System.out.println("**************************************"); } catch (Exception e) { if(tx!=null) { tx.rollback(); } } finally { session.close(); } }运行结果
仅仅执行了一次select语句,因此证明了一级缓存的存在
你还会发现当update方法执行时,如果没有参数发生变化:不会执行update语句,相反如果发生了变化,就会执行update语句,更新发生变化的字段,这又是为什么呢?
一切原因由快照:
快照是什么呢?
快照:是对数据库数据的一个映射,数据与数据库是一致的(类似于网络爬虫,知识某时刻的数据库的快照)
这样极大减轻了服务器的负担,
如果回滚,一级缓存内容数据修改后没有回复修改的前。
2.二级缓存
2.1 二级缓存:SessionFactory级别缓存,hibernate提供规范(接口),如果需要使用必须有实现类(第三方实现)。二级缓存默认不使用的,如果需要使用必须手动配置。
2.2 二级缓存的结构
2.3分类
- 类缓存
- 集合缓存
- 时间戳
2.4 作用
因为应用程序访问数据库,读写数据的代价非常高,而利用持久层的缓存可以减少应用程序与数据库之间的交互,即把访问过的数据保存到缓存中,应用程序再次访问已经访问过的数据,这些数据就可以从缓存中获取,而不必再从数据库中获取。同时如果数据库中的数据被修改或者删除,那么是、该数据所对应的缓存数据,也会被同步修改或删除,进而保持缓存数据的一致性。
未完待续.......
- Hibernate缓存机制介绍
- Hibernate:缓存机制解析
- Hibernate:缓存机制解析
- Hibernate的缓存机制
- Hibernate的缓存机制
- Hibernate的缓存机制
- HIbernate缓存机制
- Hibernate的缓存机制
- hibernate的缓存机制
- Hibernate缓存机制
- Hibernate缓存机制2
- Hibernate缓存机制介绍
- Hibernate缓存机制
- hibernate缓存机制
- hibernate 缓存机制
- hibernate缓存机制
- Hibernate缓存机制
- hibernate缓存机制
- php判断文件是否为图片
- Android之AlarmManager定时器
- java自学之旅(3)测试RandomAccessFile常用方法
- C语言基础 对字符型变量赋值
- Android 隐藏(删除) Preference 小结
- hibernate缓存机制
- sql删除一个月前的所有数据
- C/C++中static关键字详解
- Tomcat启动过程源码研究
- LeetCode题解-61-Rotate List
- hdu2460 Network
- Yii2验证码线下可以显示,线上不能显示
- java nio 常见的nio类, nio 写文件方法, nio 比io 的优势
- zynq环境搭建(一)