【hibernate框架】缓存机制之二级缓存
来源:互联网 发布:正规淘宝兼职入会费 编辑:程序博客网 时间:2024/05/29 08:34
二级缓存是sessionFactory级别的缓存,可以跨越session存在。
hibernate文档里关于二级缓存的说明:
二级缓存(The Second Level Cache)
hibernate支持多种多样的二级缓存的实现,但hibernate本身并没有写二级缓存的实现(有一个是用来内部测试的,不要用于产品开发),而是由其他的厂商来提供。
表 21.1. 缓存策略提供商(Cache Providers)
org.hibernate.cache.HashtableCacheProvider(内存)
org.hibernate.cache.EhCacheProvider(内存,硬盘)
org.hibernate.cache.OSCacheProvider(内存,硬盘)
org.hibernate.cache.SwarmCacheProvider(能用于集群环境)
org.hibernate.cache.TreeCacheProvider(能用于集群环境)
org.hibernate.cache.jbc.JBossCacheRegionFactory(能用于集群环境)
下面我们用EhCacheProvider做实验。
这是我们以前在hibernate.cfg.xml中关于缓存的配置:
如果想要使用其他厂商提供的缓存,就要在上面做好配置:
这里我们使用EhCacheProvider这个二级缓存
EhCacheProvider自己也有一个配置文件:(这个配置文件在hibernate包下的project/etc/ehcache.xml)
讲二级缓存是为了应付面试的,工作中,除非必要,一般是不用二级缓存的。
有必要用二级缓存的场景:
1.经常被访问的
2.改动不大,不会经常被改动
3.数量有限
二级缓存的使用,利用注解(不是jpa的注解,是hibernate的)
READ_ONLY是只读(在二级缓存里不允许改)
READ_WRITE是既能读又能改
region()是对应的缓存策略名称,不填就默认使用default
使用的时候别忘了引入ehcache的jar包:ehcache-1.5.0.jar
加入ehcache的配置文件ehcache.xml之后,在category类上加注解:
之后进行测试:
测试结果:
Hibernate:
select
category0_.id as id0_0_,
category0_.name as name0_0_
from
Category category0_
where
category0_.id=?
c0
c0
hibernate文档里关于二级缓存的说明:
二级缓存(The Second Level Cache)
hibernate支持多种多样的二级缓存的实现,但hibernate本身并没有写二级缓存的实现(有一个是用来内部测试的,不要用于产品开发),而是由其他的厂商来提供。
表 21.1. 缓存策略提供商(Cache Providers)
org.hibernate.cache.HashtableCacheProvider(内存)
org.hibernate.cache.EhCacheProvider(内存,硬盘)
org.hibernate.cache.OSCacheProvider(内存,硬盘)
org.hibernate.cache.SwarmCacheProvider(能用于集群环境)
org.hibernate.cache.TreeCacheProvider(能用于集群环境)
org.hibernate.cache.jbc.JBossCacheRegionFactory(能用于集群环境)
下面我们用EhCacheProvider做实验。
这是我们以前在hibernate.cfg.xml中关于缓存的配置:
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
如果想要使用其他厂商提供的缓存,就要在上面做好配置:
这里我们使用EhCacheProvider这个二级缓存
<property name="cache.use_second_level_cache">true</property><property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
EhCacheProvider自己也有一个配置文件:(这个配置文件在hibernate包下的project/etc/ehcache.xml)
<ehcache> <diskStore path="java.io.tmpdir"/> <!--默认cache的配置--> <defaultCache maxElementsInMemory="10000"<!--在缓存里最多多少个对象--> eternal="false"<!--是否从来不把内存的对象清除--> timeToIdleSeconds="12"<!--12秒没人来查这个缓存就将这个对象清除--> timeToLiveSeconds="120"<!--某个对象呆了120秒缓存就将这个对象清除--> overflowToDisk="true"<!--溢出的时候是否放到硬盘--> /> <cache name="sampleCache1"<!--缓存名字,可以想用哪一个缓存就用哪一个--> maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true" /> <cache name="sampleCache2" maxElementsInMemory="1000" eternal="true" timeToIdleSeconds="0" timeToLiveSeconds="0" overflowToDisk="false" /> </ehcache>
讲二级缓存是为了应付面试的,工作中,除非必要,一般是不用二级缓存的。
有必要用二级缓存的场景:
1.经常被访问的
2.改动不大,不会经常被改动
3.数量有限
二级缓存的使用,利用注解(不是jpa的注解,是hibernate的)
@Cache( (1)CacheConcurrencyStrategy usage(); (2)String region() default ""; (3)String include() default "all";)例如:
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)NONSTRICT_READ_WRITE说的是非严格读写
READ_ONLY是只读(在二级缓存里不允许改)
READ_WRITE是既能读又能改
region()是对应的缓存策略名称,不填就默认使用default
使用的时候别忘了引入ehcache的jar包:ehcache-1.5.0.jar
加入ehcache的配置文件ehcache.xml之后,在category类上加注解:
package com.bjsxt.hibernate;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import org.hibernate.annotations.BatchSize;import org.hibernate.annotations.Cache;import org.hibernate.annotations.CacheConcurrencyStrategy;@Entity@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)public class Category {private int id;private String name;@Id@GeneratedValuepublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
之后进行测试:
@Testpublic void testHuanCun2(){Session session = sf.openSession();session.beginTransaction();Category c=(Category)session.load(Category.class,1);System.out.println(c.getName());session.getTransaction().commit();session.close();Session session2 = sf.openSession();session2.beginTransaction();Category c2=(Category)session2.load(Category.class,1);System.out.println(c2.getName());session2.getTransaction().commit();session2.close();}
测试结果:
Hibernate:
select
category0_.id as id0_0_,
category0_.name as name0_0_
from
Category category0_
where
category0_.id=?
c0
c0
发现第二次去缓存中去取了
转载请注明出处:http://blog.csdn.net/acmman/article/details/44132207
0 0
- 【hibernate框架】缓存机制之二级缓存
- 【JavaWeb框架学习】之Hibernate缓存机制、一级缓存和二级缓存介绍
- hibernate回顾之缓存机制-一级缓存、二级缓存、查询缓存
- hibernate回顾之缓存机制-一级缓存、二级缓存、查询缓存
- 【hibernate框架】缓存机制之一级缓存
- 【hibernate框架】缓存机制之查询缓存
- 浅谈Hibernate缓存机制:一级缓存、二级缓存
- hibernate缓存机制(三)-二级缓存机制
- Hibernate缓存机制 2之Hibernate的二级缓存之数据缓存
- hibernate缓存学习之【二级缓存】
- hibernate的一级缓存和二级缓存机制
- Hibernate二级缓存,使用Ehache缓存框架
- Hibernate缓存机制以及一级缓存和二级缓存的作用
- Hibernate缓存机制以及一级缓存和二级缓存的作用
- Hibernate缓存机制以及一级缓存和二级缓存的作用
- Hibernate缓存机制以及一级缓存和二级缓存的作用
- Hibernate缓存机制以及一级缓存和二级缓存的作用
- hibernate的缓存机制,一级缓存和二级缓存
- 聊聊Oracle外键约束(Foreign Key)的几个操作选项
- 【R】Linux安装R语言包(Installing R packages on Linux)
- Android—Activity在被系统回收之前保存当前状态
- MARYLAND/Software Security 摘要与感悟(2)
- [OpenCV] -- win7下配置OpenCV的Qt开发环境
- 【hibernate框架】缓存机制之二级缓存
- 通过反汇编程序观察计算机执行过程
- Object-C中对自定义类实现<NSCopying>协议
- 黑马程序员——java集合
- 10分钟学会使用mybatis
- 【读书笔记】Spring实战(第4章 面向切面的Spring)
- codeforces 518 C. Anya and Smartphone
- [OpenCV]在显示窗口中截图
- 通过反汇编代码探究计算机运行过程