关于ehcache二级缓存
来源:互联网 发布:java随机数生成 编辑:程序博客网 时间:2024/06/14 07:12
hibernate默认开启一级缓存,其实和我们的mybatis的一级缓存一样的
默认保留级别是session级别。session关闭我们的保存的缓存消失,否则一直存在,想想我们之前修改的数据。
看这个实验
Student stu=(Student) session.get(Student.class, 4);
System.out.println(stu.getStuName());
stu.setStuName("xiaoming2");
Transaction tx=session.beginTransaction();
tx.commit();
Student stu2=(Student) session.get(Student.class, 4);
System.out.println(stu2.getStuName());
我们在这里需要使用2及缓存
ehcache-core-2.4.3.jar这个东西非常好用的。注意并不是属于hibernate的东西。也就是使用的别的地方的时候也可以使用
首先在src下创建ehcache.xml文件,注意这个文件我们可以在它的jar包中找到的
<diskStore path="java.io.tmpdir"/>这句话表明了缓存默认会找到一个输出路径的 内存保存2级缓存
maxElementsInMemory可以存放对少个缓存对象。
eternal--是否是永久的不会被清除的
timeToIdleSeconds---多少秒清除
timeToLiveSeconds--存活多少秒 一般设置比上面要长一点时间。
overflowToDisk--如果超过了最多生存对象将被写入到硬盘上
首先我们看一级缓存
Student stu=(Student) session.get(Student.class, 4);
System.out.println(stu.getStuName());
Student stu2=(Student) session.get(Student.class, 4);
System.out.println(stu.getStuName());
发现sql语句执行了一次,在没关闭session之前,一级缓存是一直存在的。
我们做实验2
HibernateUtil util=new HibernateUtil();
Session session=util.getSession();
Student stu=(Student) session.get(Student.class, 4);
System.out.println(stu.getStuName());
session.close();//关闭session,在下边重新获得一个新的session
Session session2=util.getSession();
Student stu2=(Student) session2.get(Student.class, 4);
System.out.println(stu.getStuName());
我们现在就来配置
添加关于cache的jar包
首先在src下配置ehcache.xml文件,之前就说过了
第二在hibernate配置文件中添加如下话
<property name="cache.use_second_level_cache">true</property>
<property name="cache.use_query_cache">true</property>
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
第三在需要缓存的的配置文件中
<cache usage="read-only" region="sampleCache1"/>
重新测试实验,实验成功
需要注意的是,我们不可以修改里边的数据了
这里需要注意的是,我们在ehcahe文件中看到的,二级缓存保存的是对象信息。那如果我们查询的东西并不是对象呢?
我们可以使用查询缓存。
查询缓存会把我们不是对象的数据包装成为对象使用
我们来看实验:
HibernateUtil util=new HibernateUtil();
Session session=util.getSession();
Query query=session.createQuery("select stuName from Student");
System.out.println(query.list().get(0));
session.close();
Session session2=util.getSession();
Query query2=session2.createQuery("select stuName from Student");
System.out.println(query2.list().get(0));
发现还是多次查询了数据库
怎么办?
其实我们刚才在配置文件添加的这个东西
<property name="cache.use_query_cache">true</property>
就是用于开启查询缓存
别的地方都不需要改变
HibernateUtil util=new HibernateUtil();
Session session=util.getSession();
Query query=session.createQuery("select stuName from Student");
query.setCacheable(true); //这里就是使用二级查询缓存
System.out.println(query.list().get(0));
session.close();
Session session2=util.getSession();
Query query2=session2.createQuery("select stuName from Student");
query2.setCacheable(true);
System.out.println(query2.list().get(0));
默认保留级别是session级别。session关闭我们的保存的缓存消失,否则一直存在,想想我们之前修改的数据。
看这个实验
Student stu=(Student) session.get(Student.class, 4);
System.out.println(stu.getStuName());
stu.setStuName("xiaoming2");
Transaction tx=session.beginTransaction();
tx.commit();
Student stu2=(Student) session.get(Student.class, 4);
System.out.println(stu2.getStuName());
我们在这里需要使用2及缓存
ehcache-core-2.4.3.jar这个东西非常好用的。注意并不是属于hibernate的东西。也就是使用的别的地方的时候也可以使用
首先在src下创建ehcache.xml文件,注意这个文件我们可以在它的jar包中找到的
<diskStore path="java.io.tmpdir"/>这句话表明了缓存默认会找到一个输出路径的 内存保存2级缓存
maxElementsInMemory可以存放对少个缓存对象。
eternal--是否是永久的不会被清除的
timeToIdleSeconds---多少秒清除
timeToLiveSeconds--存活多少秒 一般设置比上面要长一点时间。
overflowToDisk--如果超过了最多生存对象将被写入到硬盘上
首先我们看一级缓存
Student stu=(Student) session.get(Student.class, 4);
System.out.println(stu.getStuName());
Student stu2=(Student) session.get(Student.class, 4);
System.out.println(stu.getStuName());
发现sql语句执行了一次,在没关闭session之前,一级缓存是一直存在的。
我们做实验2
HibernateUtil util=new HibernateUtil();
Session session=util.getSession();
Student stu=(Student) session.get(Student.class, 4);
System.out.println(stu.getStuName());
session.close();//关闭session,在下边重新获得一个新的session
Session session2=util.getSession();
Student stu2=(Student) session2.get(Student.class, 4);
System.out.println(stu.getStuName());
我们现在就来配置
添加关于cache的jar包
首先在src下配置ehcache.xml文件,之前就说过了
第二在hibernate配置文件中添加如下话
<property name="cache.use_second_level_cache">true</property>
<property name="cache.use_query_cache">true</property>
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
第三在需要缓存的的配置文件中
<cache usage="read-only" region="sampleCache1"/>
重新测试实验,实验成功
需要注意的是,我们不可以修改里边的数据了
这里需要注意的是,我们在ehcahe文件中看到的,二级缓存保存的是对象信息。那如果我们查询的东西并不是对象呢?
我们可以使用查询缓存。
查询缓存会把我们不是对象的数据包装成为对象使用
我们来看实验:
HibernateUtil util=new HibernateUtil();
Session session=util.getSession();
Query query=session.createQuery("select stuName from Student");
System.out.println(query.list().get(0));
session.close();
Session session2=util.getSession();
Query query2=session2.createQuery("select stuName from Student");
System.out.println(query2.list().get(0));
发现还是多次查询了数据库
怎么办?
其实我们刚才在配置文件添加的这个东西
<property name="cache.use_query_cache">true</property>
就是用于开启查询缓存
别的地方都不需要改变
HibernateUtil util=new HibernateUtil();
Session session=util.getSession();
Query query=session.createQuery("select stuName from Student");
query.setCacheable(true); //这里就是使用二级查询缓存
System.out.println(query.list().get(0));
session.close();
Session session2=util.getSession();
Query query2=session2.createQuery("select stuName from Student");
query2.setCacheable(true);
System.out.println(query2.list().get(0));
阅读全文
0 0
- 关于ehcache二级缓存
- 二级缓存ehcache
- hibernate + ehcache 二级缓存技术
- Hibernate+ehcache二级缓存技术
- Hibernate+ehcache二级缓存技术
- Hibernate+ehcache二级缓存技术
- Hibernate ehcache二级缓存技术
- Hibernate+ehcache二级缓存技术
- Hibernate+ehcache二级缓存技术
- Hibernate使用EHCache二级缓存
- Hibernate+ehcache二级缓存技术
- Hibernate+ehcache二级缓存配置
- Hibernate+ehcache二级缓存技术
- Hibernate ehcache配置二级缓存
- hibernate + ehcache 二级缓存技术
- Hibernate+ehcache二级缓存技术
- EhCache二级缓存技术
- SSH ehcache二级缓存配置
- JDBC(8)—Blob
- 类的大小
- 无向图 邻接表 建立
- 谜题4:It's Elementary 初级问题
- wifi扫描工具
- 关于ehcache二级缓存
- poj2411 Mondriaan's Dream(状压dp)
- redis的 悲观锁和乐观锁的区别
- Spring 4.0 学习日记(9) ---XML配置实现AOP切面
- Excel在统计分析中的应用—第二章—描述性统计-Part4-偏度(四分位数和Spearman偏度系数)
- CSS
- 实例2.1 两个有序链表序列的合并
- Libevent源码剖析——事件event
- 2017 Multi-University Training Contest