`

Hibernate性能优化之二级缓存

    博客分类:
  • J2EE
阅读更多
基本原理:
    我自己的理解就是缓存在内存中的存在方式可以简单的看成一个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/
分享到:
评论

相关推荐

    Hibernate性能优化:二级缓存

    NULL 博文链接:https://quicker.iteye.com/blog/660523

    Hibernate3性能优化 Hibernate_regerence3.12

    的效率低于直接JDBC存取,然而,在经过比较好的性能优化之后,Hibernate的性能还是让人相当满意的, 特别是应用二级缓存之后,甚至可以获得比较不使用缓存的JDBC更好的性能,下面介绍一些通常的 Hibernate的优化策略...

    详解Hibernate缓存与性能优化

    在hibernate中,提到性能优化,很自然地我们就想到了缓存。缓存是什么,都有哪些呢?下面这篇文章就主要给大家介绍了关于Hibernate缓存与性能优化的相关资料,需要的朋友可以参考下。

    hibernate优化

    确实,在普遍情况下,需要将执行转换为SQL语句的Hibernate的效率低于直接JDBC 存取,然而,在经过比较好的性能优化之后,Hibernate的性能还是让人相当满意的,特别是应用二级缓存之后,甚至可以获得比较不使用缓存的...

    08.拓薪教育-hibernate4.3的hibernate.cfg.xml基本配置.part2

    主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...

    马士兵hibernate学习笔记(原版)

    目录 课程内容 1 HelloWorld 2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么... 4 一级缓存和二级缓存和査询缓存(面试题)(详见hibernate_3000_Hibernate_3KindsOf_Cache) 5 事务并发处理(面试的意义更大)

    08.拓薪教育-hibernate4.3的hibernate.cfg.xml基本配置.part1

    主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...

    05.拓薪教育-hibernate4.3环境搭建上.part1

    主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...

    基于Hibernate的在线考试优化设计与实现

    现有的基于Web的在线考试存在的问题是,当...对于并发操作频繁的系统而言,其封装的JDBC数据库连接池技术和良好的二级缓存管理机制使系统性能提升成为可能。本文针对在线考试系统存在的问题,设计并实现了性能优化方案。

    03.拓薪教育-hibernate4.3架构详解

    主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...

    01.拓薪教育-hibernate4.3介绍-序

    主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...

    07.拓薪教育-hibernate4.3环境搭建下

    主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...

    04.拓薪教育-hibernate4.3官方核心包介绍.part1

    主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...

    02.拓薪教育-hibernate4.3-orm剖析.part2

    主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...

    04.拓薪教育-hibernate4.3官方核心包介绍.part2

    主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...

    06.拓薪教育-hibernate4.3环境搭建中.part1

    主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...

    06.拓薪教育-hibernate4.3环境搭建中.part2

    主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...

    05.拓薪教育-hibernate4.3环境搭建上.part2

    主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     22.4 管理Hibernate的第二级缓存  22.4.1 配置进程范围内的第二级缓存  22.4.2 配置集群范围内的第二级缓存  22.4.3 在应用程序中管理第二级缓存  22.4.4 Session与第二级缓存的交互模式  22.5 运行本章的...

    02.拓薪教育-hibernate4.3-orm剖析.part1

    主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...

Global site tag (gtag.js) - Google Analytics