hiberbnate 缓存策略概述
1. 首先了解什么是缓存
这里说的缓存并不是指计算机的内存或者CPU的一二级缓存。
缓存是指为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能的一种策略。即对物理数据源的复制,存在于内存中。
为什么使用缓存:
1.ORM框架访问数据库的效率直接影响应用程序的运行速度,提升和优化ORM框架的执行效率至关重要。
2.Hibernate的缓存是提升和优化Hibernate执行效率的重要手段,所以学会Hibernate缓存的使用和配置是优化的关键。
3.评判一个ORM框架是否优秀,访问数据库的频次就是一个重要的标准。

Hibernate缓存:
1.Hibernate缓存与session相关,同一个session第二次访问同一个对象将使用缓存。
2.在不同的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<Employee> list =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中能直接使用问题)


<cache/>标签( .hbm.xml文件)

标签介绍:

5. 一二级缓存对比

总结:
1)hibernate的缓存能提高检索效率
2)hibernate的缓存分为一级缓存和二级缓存。一级缓存是会话级缓存,二级缓存是应用级缓存。
3)hibernate的缓存在提高检索的同时,也会增加服务器的消耗,所以注意缓存的使用策略。
hiberbnate 缓存策略概述的更多相关文章
- Web开发基本准则-55实录-缓存策略
续上篇<Web开发基本准则-55实录-Web访问安全>. Web开发基本准则-55实录-缓存策略 郑昀 创建于2013年2月 郑昀 最后更新于2013年10月26日 提纲: Web访问安全 ...
- [转载]WEB缓存技术概述
[原文地址]http://www.hbjjrb.com/Jishu/ASP/201110/319372.html 引言 WWW是互联网上最受欢迎的应用之一,其快速增长造成网络拥塞和服务器超载,导致客户 ...
- Hibernate(四)——缓存策略+lazy
Hibernate作为和数据库数据打交道的框架,自然会设计到操作数据的效率问题,而对于一些频繁操作的数据,缓存策略就是提高其性能一种重要手段,而Hibernate框架是支持缓存的,而且支持一级和二级两 ...
- ExoPlayer Talk 01 缓存策略分析与优化
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Android studio 2.3.3 | ExoPlayer r2.5.1 使用 ExoPlayer已经有一段时间了, ...
- memcached架构及缓存策略
----------------------------------------概述---------------------------------------- Memcached是一套高性能分布 ...
- Hibernate框架(四)缓存策略+lazy
Hibernate作为和数据库数据打交道的框架,自然会设计到操作数据的效率问题,而对于一些频繁操作的数据,缓存策略就是提高其性能一种重要手段,而Hibernate框架是支持缓存的,而且支持一级和二级两 ...
- 【腾讯Bugly干货分享】彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/qOMO0LIdA47j3RjhbCWUEQ 作者:李 ...
- 【转】理解Java Integer的缓存策略
本文将介绍 Java 中 Integer 缓存的相关知识.这是 Java 5 中引入的一个有助于节省内存.提高性能的特性.首先看一个使用 Integer 的示例代码,展示了 Integer 的缓存行为 ...
- Redis的缓存策略和主键失效机制
作为缓存系统都要定期清理无效数据,就需要一个主键失效和淘汰策略. >>EXPIRE主键失效机制 在Redis当中,有生存期的key被称为volatile,在创建缓存时,要为给定的key设置 ...
随机推荐
- xtuoj 1235 CQRXLB(博弈论)
CQRXLB Accepted : 19 Submit : 40 Time Limit : 1000 MS Memory Limit : 65536 KB CQRXLB Problem Des ...
- HDU 6041 I Curse Myself(二分+搜索)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6041 [题目大意] 给出一个仙人掌图,求第k小生成树 [题解] 首先找到仙人掌图上的环,现在的问题 ...
- 1.3 (JavaScript学习笔记)JavaScript对象
在JavaScript中所有事物都是对象,字符串.数值.数组.函数...等, JavaScript还允许自定义对象.这些在1.1中有所介绍. 一.遍历对象属性 <!DOCTYPE html> ...
- 必知必会JVM垃圾回收——对象搜索算法与回收算法
垃圾回收(GC)是JVM的一大杀器,它使程序员可以更高效地专注于程序的开发设计,而不用过多地考虑对象的创建销毁等操作.但是这并不是说程序员不需要了解GC.GC只是Java编程中一项自动化工具,任何一个 ...
- MYSQL复习笔记5-select-from-where子句
Date: 20140125Auth: Jin参考:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#select一.select子句主要定 ...
- 转载:做ArcEngine的二次开发出现“没有注册类别 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)”
转自:http://blog.sina.com.cn/s/blog_638e61a40100ynnc.html 出现这个问题主要是因为32位操作系统和64位操作系统存在兼容性问题. 解决方案: 1.鼠 ...
- iOS:文本视图控件UITextView的详细使用
文本视图控件:UITextView 介绍:它是一个文本域的编辑视图,可以在该区域上进行编辑(包括删除.剪贴.复制.修改等),它与文本框UITextField的不同之处是:当它里面的每一行内容超出时,可 ...
- unity reflection probe --- forward deferred transparent opaque
deferred 和forward reflection probe 的差别 deferred ref是逐像素的 forward是逐 obj 但我还遇到一个问题就是box projection ref ...
- win8.1 64位环境搭建android开发环境
1.下载JDK,http://www.oracle.com/technetwork/java/javase/downloads/index.html,选择版本 2.安装刚刚下载的JDK 3.环境变量配 ...
- github下fork后如何同步源的新更新
当然,那是完全不用命令行的办法,其实我还是更推荐命令行,流程如下: 首先要先确定一下是否建立了主repo的远程源: git remote -v 如果里面只能看到你自己的两个源(fetch 和 push ...
