一篇文章讲明白hiberbnate缓存策略概述

简介: 一篇文章讲明白hiberbnate缓存策略概述

1. 首先了解什么是缓存

这里说的缓存并不是指计算机的内存或者CPU的一二级缓存。

缓存是指为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能的一种策略。即对物理数据源的复制,存在于内存中。

为什么使用缓存:

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

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

3.评判一个ORM框架是否优秀,访问数据库的频次就是一个重要的标准。

Hibernate缓存:

1.Hibernate缓存与session相关,同一个session第二次访问同一个对象将使用缓存。

2.在不同//代码效果参考:http://www.zidongmutanji.com/bxxx/33860.html

的session中多次查询同一个对象时,会执行多次数据库查询。

3.在一级缓存当中,持久化类的每个实例都具有唯一的OID,也就是说同一个session两次查询同一个对象时,第二次是不会再将对象保存在缓存当中的。

2. 由下列代码可知使用缓存和不使用缓存的一些区别:

即:

3. hibernate一级缓存介绍

3.1 一级缓存session 的相关API 【一级缓存无法取消,用两个方法管理——evict() & clear() 】(执行两者之后都将在控制台重新输出查询语句)

Employee emp=(Employee) session.get(Employee.class,1);

System.out.println(emp.getName());

// 创建另一新的缓存

// session =sessionFactory.openSession();

session.evict(emp);//将该对象从一级缓存中清除

// session.clear();//清除一级缓存中的所有内容

emp=(Employee) session.get(Employee.class,1);

System.out.println(emp.getName());

3.2 关于遍历操作的两个方法之间的区别【 list() & iterate() 】

3.2.1 list()遍历查询

结论: query.list() 不会使用到缓存

3.2.2 iterate()遍历查询

Query query =session.createQuery("from Employee");

// List list //代码效果参考:http://www.zidongmutanji.com/zsjx/36663.html

=query.list();

// for(Employee emp:list){

// System.out.println(emp.getName());

// }

Iterator it =query.iterate();

while(it.hasNext()){

Employee emp=(Employee)it.next();

System.out.println(emp.getName());

}

取消注释时,由于list()查询后session中已有数据,这时iterate()方法会从缓存中获取所需数据

执行注释时,iterate()方法依然会先从缓存中查找,因为缓存中没有所需的数据,这时会再从数据库中查找

3.2.3 小结一级缓存:

只能在一次会话中或者只在本次session 中起作用,这是hibernate 自带的不可消除,query 创建的查询create query (from 对象)表示查询所有的信息,query.list 不能从session 中获取缓存但可以存缓存。迭代器查询所有,先查询所有对象中的id 然后通过id 在session 缓存中查取id 所对应的所有信息,有几个id向数据库发送几次操作或者说是执行几次查询语句。

4. 二级缓存(解决一个session在其他session中能直接使用问题)

标签( .hbm.xml文件)

标签介绍:

5. 一二级缓存对比

总结:

1)hibernate的缓存能提高检索效率

2)hibernate的缓存分为一级缓存和二级缓存。一级缓存是会话级缓存,二级缓存是应用级缓存。

3)hibernate的缓存在提高检索的同时,也会增加服务器的消耗,所以注意缓存的使用策略。

相关文章
|
1天前
|
存储 设计模式 缓存
Java中的缓存设计与优化策略
Java中的缓存设计与优化策略
|
3天前
|
缓存 监控 NoSQL
淘客返利系统的缓存策略与实现
淘客返利系统的缓存策略与实现
|
9天前
|
缓存 索引
cpu缓存一致性问题---cache写策略
cpu缓存一致性问题---cache写策略
9 1
|
10天前
|
存储 缓存 NoSQL
Redis 缓存失效策略及其应用场景
Redis 缓存失效策略及其应用场景
18 1
|
21天前
|
缓存 NoSQL Java
互联网大厂的缓存策略:抵抗超高并发的秘密武器,已开源!
该文探讨了如何在互联网大厂项目中设计和使用缓存,以应对百万级流量。作者以秒杀系统为例,提出采用本地缓存+分布式缓存的混合型缓存架构,强调了缓存设计在抗高并发流量中的重要性。文章详细阐述了秒杀系统对缓存的核心诉求,包括流量分层、读写策略和并发控制,以及如何处理缓存失效的情况。此外,还介绍了缓存的使用场景,如接口缓存策略,并分析了缓存集群方案、缓存交互流程和缓存刷新机制。最后,讨论了数据一致性问题和代码的扩展性实现。文中提供了开源的缓存方案链接,包括GitHub、Gitee和GitCode仓库。
54 0
|
29天前
|
存储 缓存 NoSQL
Redis 缓存失效策略及其应用场景
Redis 缓存失效策略及其应用场景
49 1
|
1月前
|
存储 缓存 监控
中间件Read-Through Cache(直读缓存)策略实现方式
【5月更文挑战第11天】中间件Read-Through Cache(直读缓存)策略实现方式
35 4
中间件Read-Through Cache(直读缓存)策略实现方式
|
1月前
|
存储 缓存 监控
中间件Read-Through Cache(直读缓存)策略注意事项
【5月更文挑战第11天】中间件Read-Through Cache(直读缓存)策略注意事项
24 2
|
1月前
|
存储 缓存 中间件
中间件Read-Through Cache(直读缓存)策略工作原理
【5月更文挑战第11天】中间件Read-Through Cache(直读缓存)策略工作原理
25 3
|
1月前
|
缓存 算法 前端开发
前端开发者必知的缓存淘汰策略:LRU算法解析与实践
前端开发者必知的缓存淘汰策略:LRU算法解析与实践