- 浏览: 352614 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (160)
- webservice (2)
- 数据库开发 (9)
- LINUX (6)
- 团队协作 (5)
- 前端技术 (4)
- J2EE (31)
- web服务器 (9)
- 经验常识 (12)
- 开发工具 (17)
- 项目管理 (7)
- 重构与设计模式 (8)
- 安全技术 (1)
- 并发编程 (1)
- 移动互联网 (2)
- 编码风格 (1)
- 领域建模 (1)
- 随想杂记 (12)
- 翻译 (2)
- 问题排查 (2)
- 数据挖掘 (4)
- 软件架构 (1)
- java语言基础知识 (13)
- 文件读写 (1)
- mac研发笔记 (1)
- 网络问题 (1)
- python学习 (0)
- Java8新特性 (1)
- soft kes collections (1)
最新评论
-
cremains:
...
java8新特性学习笔记 -
bingyingao:
guooo 写道很好的总结,不知能否转载?可以,多谢关注
又四年了,再看如何快速融入一个新团队 -
guooo:
很好的总结,不知能否转载?
又四年了,再看如何快速融入一个新团队 -
omeweb:
又过了好几年了,有啥新感悟没有?
两年已过去,再看该如何快速融入新团队 -
kely39:
感谢楼主,问题已解决
包冲突问题的解决方法
基本原理:
我自己的理解就是缓存在内存中的存在方式可以简单的看成一个Map,
通过key在缓存里面找value。对于对象来说,这个键就是id,而值就是
对象实例,而对与query查询结果的缓存,键是query中使用的sql或hql语句
在hibernate框架中使用用二级缓存,当查询的时候,就会根据这个键去找
现在缓存中找,如果没有,就再到数据库里找。
适用场合:
并不是说所有的场合使用了缓存,就一定能够提高性能,那么什么时候适合用,
用什么方式的缓存,这都需要慎重(需要抽出时间详细的学习了解),一般的是在数
据没有第三方修改,数据大小在数据大小在可接收范围之内,数据更新频率低,非
关键数据(不是财务数据等)满足这些条件的时候。
我使用二级缓存的环境背景
我公司是运营的是3G城市快讯项目,主要是展现出数据,让用户去浏览,基本上完
全符合二级缓存的适用场合,所以在前台数据展现时大量使用了二级缓存技术,很明显
的加快了响应速度,提高了的网站的性能。
使用hibernate二级缓存一般都是借助于第三方缓存框架,目前有多种方式可供选择,
我公司项目采用的是OSCache的方式,配置了读写型(缓存有多种,分只读型,读写性等等)
缓存,对此,我在学习,工作的工程中,感触颇深,以下是我的一些总结:
1.
借助OsCache实现二级缓存,只需要在hibernate的基础之上添加一个oscache-2.4.1.jar包
需要在hibernate.cfg.xml中添加
<property name="hibernate.cache.use_query_cache">true</property>
<property name="hibernate.cache.use_second_level_cache">
true
</property>
<property name="hibernate.cache.provider_class">
org.hibernate.cache.OSCacheProvider
</property>
2.
需要在.hbm.xml文件中加上 <cache usage="read-write"/>,
这主要是对对象通过id (get load) 查询时使二级缓存生效
如下
<class name="com.caituo.waptown.bean.Content" table="WAPTOWN_CONTENT" >
<cache usage="read-write"/> --配置缓存方式是不严格读写型缓存
3.在ssh中
调用get()方法将对象加载到内存中,如果配置了二级缓存,那么这个对像将会在缓存中,
调用update()方法更改后,将会更改内存中缓存的这个对象,同时修改数据库
而如果,你进行了二级缓存,在项目运行期间修改了数据库中的数据,缓存中的数据将还是原来的,不能显
示出你的最新修改,除非手动清空缓存中的对象。
调用以下方法可清空所有的缓存对象,以及query查询的缓存
public void evictSecondLevelCache() {
SessionFactory sf =this.getSessionFactory();
//清空所有对象
Map<String, CollectionMetadata> roleMap = sf.getAllCollectionMetadata();
for (String roleName : roleMap.keySet()) {
sf.evictCollection(roleName);
}
Map<String, ClassMetadata> entityMap = sf.getAllClassMetadata();
for (String entityName : entityMap.keySet()) {
sf.evictEntity(entityName);
}
//清空query查询的结果,但是作为对象被缓存的将不被清空
sf.evictQueries();
}
调用以下语句可清空二级缓存中的某单个对象
this.getSessionFactory().evict(Content.class, contentid);
这可以单独做一个页面,叫做“刷新缓存”,专门用来在直接通过sql更改数据库后同步数据库与缓存中的
数据。
4.hibernate的二级缓存是建立在SessionFactory级别的
配置了SessionFactory后,所有的hibernate的session都将共用缓存的数据
当单独使用hibernate的时候,想要使用二级缓存 ,则应将SessionFactory声明为静态的,
eg:
private static Configuration config=new Configuration().configure();
private static SessionFactory factory=config.buildSessionFactory();
如果用了spring,则不用做了
用了spring的项目一旦启动,自始至终就是只有一个SessionFactory对象了。
5.当使用query查询并配置二级缓存的时候两种sql语句的不同
A.
String hql="select new map(user.userId as userid,user.userName as username ,userAddress as
useraddress) from UserTbl user";
B.
String hql="from UserTbl";
上述中的A法查询后 只缓存 sql-查询结果 这么一个键值对的形式,当你再通过id去查询的时候,仍然会去查询数据库。
而使用B法查询后,不仅缓存 sql-查询结果 这么一个键值对 ,而且缓存所有已经查询出的(id-对象)键
值对 ,也就是在配置了二级缓存的前提下通过的String hql="from UserTbl"查询后,你再通过id去查某个
对象(限于get(),load()方法),也不会再去查询数据库了。
6.使用OsCache缓存还应有一个配置文件
oscache.properties 默认路径为:
在这个文件中有一些重要的参数,譬如,配置你的系统的最大缓存数、缓存过期时间等等
7.另外,OsCache是一个独立的缓存框架,它可以在只有jsp-servlet的程序中独立使用
为了更清晰的了解掌握并熟练运用,我也专门做了示例,上传在我的blog
http://bingyingao.download.csdn.net/
我自己的理解就是缓存在内存中的存在方式可以简单的看成一个Map,
通过key在缓存里面找value。对于对象来说,这个键就是id,而值就是
对象实例,而对与query查询结果的缓存,键是query中使用的sql或hql语句
在hibernate框架中使用用二级缓存,当查询的时候,就会根据这个键去找
现在缓存中找,如果没有,就再到数据库里找。
适用场合:
并不是说所有的场合使用了缓存,就一定能够提高性能,那么什么时候适合用,
用什么方式的缓存,这都需要慎重(需要抽出时间详细的学习了解),一般的是在数
据没有第三方修改,数据大小在数据大小在可接收范围之内,数据更新频率低,非
关键数据(不是财务数据等)满足这些条件的时候。
我使用二级缓存的环境背景
我公司是运营的是3G城市快讯项目,主要是展现出数据,让用户去浏览,基本上完
全符合二级缓存的适用场合,所以在前台数据展现时大量使用了二级缓存技术,很明显
的加快了响应速度,提高了的网站的性能。
使用hibernate二级缓存一般都是借助于第三方缓存框架,目前有多种方式可供选择,
我公司项目采用的是OSCache的方式,配置了读写型(缓存有多种,分只读型,读写性等等)
缓存,对此,我在学习,工作的工程中,感触颇深,以下是我的一些总结:
1.
借助OsCache实现二级缓存,只需要在hibernate的基础之上添加一个oscache-2.4.1.jar包
需要在hibernate.cfg.xml中添加
<property name="hibernate.cache.use_query_cache">true</property>
<property name="hibernate.cache.use_second_level_cache">
true
</property>
<property name="hibernate.cache.provider_class">
org.hibernate.cache.OSCacheProvider
</property>
2.
需要在.hbm.xml文件中加上 <cache usage="read-write"/>,
这主要是对对象通过id (get load) 查询时使二级缓存生效
如下
<class name="com.caituo.waptown.bean.Content" table="WAPTOWN_CONTENT" >
<cache usage="read-write"/> --配置缓存方式是不严格读写型缓存
3.在ssh中
调用get()方法将对象加载到内存中,如果配置了二级缓存,那么这个对像将会在缓存中,
调用update()方法更改后,将会更改内存中缓存的这个对象,同时修改数据库
而如果,你进行了二级缓存,在项目运行期间修改了数据库中的数据,缓存中的数据将还是原来的,不能显
示出你的最新修改,除非手动清空缓存中的对象。
调用以下方法可清空所有的缓存对象,以及query查询的缓存
public void evictSecondLevelCache() {
SessionFactory sf =this.getSessionFactory();
//清空所有对象
Map<String, CollectionMetadata> roleMap = sf.getAllCollectionMetadata();
for (String roleName : roleMap.keySet()) {
sf.evictCollection(roleName);
}
Map<String, ClassMetadata> entityMap = sf.getAllClassMetadata();
for (String entityName : entityMap.keySet()) {
sf.evictEntity(entityName);
}
//清空query查询的结果,但是作为对象被缓存的将不被清空
sf.evictQueries();
}
调用以下语句可清空二级缓存中的某单个对象
this.getSessionFactory().evict(Content.class, contentid);
这可以单独做一个页面,叫做“刷新缓存”,专门用来在直接通过sql更改数据库后同步数据库与缓存中的
数据。
4.hibernate的二级缓存是建立在SessionFactory级别的
配置了SessionFactory后,所有的hibernate的session都将共用缓存的数据
当单独使用hibernate的时候,想要使用二级缓存 ,则应将SessionFactory声明为静态的,
eg:
private static Configuration config=new Configuration().configure();
private static SessionFactory factory=config.buildSessionFactory();
如果用了spring,则不用做了
用了spring的项目一旦启动,自始至终就是只有一个SessionFactory对象了。
5.当使用query查询并配置二级缓存的时候两种sql语句的不同
A.
String hql="select new map(user.userId as userid,user.userName as username ,userAddress as
useraddress) from UserTbl user";
B.
String hql="from UserTbl";
上述中的A法查询后 只缓存 sql-查询结果 这么一个键值对的形式,当你再通过id去查询的时候,仍然会去查询数据库。
而使用B法查询后,不仅缓存 sql-查询结果 这么一个键值对 ,而且缓存所有已经查询出的(id-对象)键
值对 ,也就是在配置了二级缓存的前提下通过的String hql="from UserTbl"查询后,你再通过id去查某个
对象(限于get(),load()方法),也不会再去查询数据库了。
6.使用OsCache缓存还应有一个配置文件
oscache.properties 默认路径为:
在这个文件中有一些重要的参数,譬如,配置你的系统的最大缓存数、缓存过期时间等等
7.另外,OsCache是一个独立的缓存框架,它可以在只有jsp-servlet的程序中独立使用
为了更清晰的了解掌握并熟练运用,我也专门做了示例,上传在我的blog
http://bingyingao.download.csdn.net/
发表评论
-
log4j关键点
2013-09-25 19:43 1063日志级别 级别顺序(低到高): DEBUG < INFO ... -
java集合排序
2013-09-24 19:18 1120java对象集合排序在开发中使用非常广泛,需要重点理解,而它实 ... -
关于java.lang.OutOfMemoryError的参数配置误区
2013-09-10 15:10 1127这两天在本机用eclipse的jetty插件跑项目,老是抛出一 ... -
spring这样的来配置一些常量很方便
2013-09-03 09:48 2498<util:list id="haidilao ... -
快速查找线程死锁(展苍)
2012-12-23 13:25 0Thread dump Thread dump是比较容易查找 ... -
javap查看虚拟机为你做了什么
2012-12-02 15:38 560public class Test { publi ... -
javaweb开发乱码问题整理
2012-03-15 14:01 999j2ee方面的开发总会遇到各种各样的乱码问题,总想抽空整理一下 ... -
用正则表达式扣出字符串中指定的多处内容
2011-12-26 15:29 1452截取打印出所有<record></recor ... -
java反射机制学习
2011-11-19 13:01 1038反射基本概念: 在java ... -
java匿名内部类使用场景列举
2011-11-18 10:57 2615java内部类是怎么一回事?匿名内部类何时会用到,之前一直很模 ... -
使用UUID生成32位ID
2011-11-14 11:11 21328UUID(Universally Unique Identif ... -
java数据类型介绍
2011-11-09 14:34 958java数据类型介绍 简单类型大小范围/精度 ... -
Exception点滴
2011-11-08 14:24 948java.lang.reflect.UndeclaredThr ... -
将set集合转为list并对对象进行排序
2011-11-06 15:09 7744之前用hibernate的时候,遇到一对多的表结构。比如班级( ... -
src地址为空导致两次进入到action请求地址
2011-10-29 13:05 1531今天用struts开发一个页面,奇怪的是我点了一次提交,达到目 ... -
struts标签与ognl表达式用法点滴
2011-10-27 18:43 1406struts标签的使用中,会涉及一些比较细的点儿,汇总一下,以 ... -
struts2第四回:工作流程解析
2011-10-14 15:18 876这两天没什么任务,就想研究一下struts2的源码,看了半天, ... -
struts2第三回:自定以拦截器
2011-10-13 19:14 1098实现一个拦截器并调用。 ============下面是Logi ... -
struts2第二回:防止重复提交
2011-10-13 18:51 2267基本原理:用户访问做了重复提交的页面,服务器会生成一个令牌,这 ... -
include与jsp:include与s:action与s:include与iframe用法汇总
2011-10-13 13:47 207161.<%@ include file="../ ...
相关推荐
本文将深入探讨Hibernate性能优化中的一个重要概念——一级缓存,并结合给出的压缩包文件“hibernate_cache_level1”,来详细解析一级缓存的工作原理及其优化策略。 一级缓存是Hibernate内置的一种缓存机制,它存在...
本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...
二级缓存是Hibernate性能优化的重要手段,通过合理配置和使用,可以显著减少数据库访问,提高系统响应速度。但同时,需要注意缓存的副作用,如数据一致性、并发控制等问题。在实际应用中,需要结合业务场景和性能...
总结来说,Hibernate 的一级缓存和二级缓存都是为了提高数据访问效率,但它们在范围和并发控制方面有所不同。一级缓存是事务级别的,保证了数据的强一致性,而二级缓存提供了更多的灵活性,可以跨事务共享,但需要...
**hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将...
在本文中,我们将深入探讨如何在Spring Boot 2.1.4.RELEASE项目中结合JPA(Java Persistence API)和Hibernate实现Redis作为二级缓存。首先,我们需要理解这些技术的基本概念。 Spring Boot 是一个用于简化Spring...
标题“Hibernate一级缓存和二级缓存”指的是Hibernate框架中的两种缓存机制,它们是提高数据访问性能的关键要素。一级缓存是Session级别的,而二级缓存是SessionFactory级别的,两者在数据库操作中起到了重要的作用...
在企业级Java应用开发中,Spring和...总之,合理利用Hibernate的二级缓存机制,结合Spring的管理能力,可以有效地提升Java应用的性能。通过优化缓存配置和策略,可以在不牺牲数据一致性的情况下,达到良好的用户体验。
总的来说,"hibernate二级缓存实例"是一个很好的学习资源,它可以帮助我们理解二级缓存的工作机制,掌握如何在项目中配置和使用,以及注意潜在的问题和优化策略。通过实践,我们可以更好地运用这一技术,提升Java...
学习和掌握Hibernate的二级缓存机制对于优化大型应用的性能至关重要。通过合理配置和使用,可以在不牺牲数据一致性的情况下,大幅度减少对数据库的访问,提高系统响应速度。在实际项目中,可以根据业务需求和系统...
在 Hibernate 中,二级缓存是一个重要的性能优化工具,尤其是在处理大量数据或者高并发场景时。这个"hibernate5.1二级缓存包"应该包含了用于实现二级缓存的相关组件和配置。 二级缓存是相对于一级缓存(Session ...
本文将详述如何在项目中使用Hibernate与Memcached结合实现二级缓存,并探讨Memcached的基本原理和使用方法。 首先,我们需要理解什么是Hibernate的二级缓存。在Hibernate框架中,一级缓存是每个Session级别的,它...
Hibernate缓存主要分为一级缓存和二级缓存。一级缓存,也称为会话缓存(Session Cache),是默认启用的,由Hibernate自动管理。它存储了当前会话期间加载的所有实体对象和关联的集合对象。当会话关闭时,一级缓存中...
本文将深入探讨Hibernate的一级缓存、二级缓存以及查询缓存,通过具体的实例来阐述它们的工作原理和使用方法。 首先,我们从一级缓存开始。一级缓存是Hibernate默认提供的缓存,它是每个Session级别的,也被称为...
然而,在处理大量数据时,性能优化显得尤为重要,这就是二级缓存的作用。本文将深入探讨Hibernate二级缓存的基本概念、工作原理及如何通过示例源码实现。 ### 1. 二级缓存概述 Hibernate的一级缓存是Session级别的...
6. **性能优化**:利用二级缓存能够显著减少数据库查询,但需要注意缓存同步和更新策略,避免数据不一致。例如,更新数据库时,必须正确处理缓存的清除或更新。 7. **分布式环境中的应用**:在分布式环境中,多台...
《深入理解Hibernate的一级缓存与二级缓存》 Hibernate作为一款强大的ORM框架,其缓存机制是优化数据库操作性能的关键之一。缓存主要分为一级缓存和二级缓存,它们各自承担着不同的职责,共同提升了数据访问的效率...
二级缓存是 Hibernate 缓存策略的一部分,它在应用程序的多个会话之间共享数据,进一步优化了数据库访问效率。 二级缓存分为以下关键知识点: 1. **一级缓存与二级缓存的区别**: - 一级缓存:每个 Hibernate ...