day37 05-HIbernate二级缓存:一级缓存更新同步到二级缓存及二级缓存配置文件
一级缓存的更新会自动同步到二级缓存。


@SuppressWarnings("all")
@Test
// 将内存中的数据写到硬盘
public void demo7(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
List<Order> list = session.createQuery("from Order").list();//现在是查询所有的订单 一执行createQuery就会往二级缓存里面放但是它不会用
//所以它就会往硬盘上去写了。但是为什么硬盘上c:/ehcache下的数据文件是空的呢?因为程序执行的速度太快了然后就结束了。然后它没来得及往硬盘去写你的程序就结束了。
//加上断点,你给它点空闲的时间。它就会把多余的对象写到硬盘上了。
tx.commit();
}
@Test
// 一级缓存的更新会同步到二级缓存:
public void demo6(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); Customer customer = (Customer) session.get(Customer.class, 1);//查询一号客户
customer.setCname("芙蓉");//customer.setCname是更新一级缓存,它可以同步到二级缓存.你的一级缓存一更新,它把二级缓存也更新了. tx.commit(); session = HibernateUtils.getCurrentSession();
tx = session.beginTransaction(); @SuppressWarnings("unused")
Customer customer2 = (Customer) session.get(Customer.class, 1);//是最新的数据呢?还是原来一级缓存中的数据?
//一级缓存的更新会同步到二级缓存.为了保证二级缓存的数据没有问题,它肯定会拿到最新的数据.
tx.commit();
}


<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<diskStore path="c:/ehcache"/><!-- 如果你往硬盘上去写,目标硬盘的路径是java.io.tmpdir java.io.tmpdir是系统临时文件存放的路径 -->
<!-- 默认的cache可以对所有的持久化类(在hibernate.cfg.xml里面配置的持久化类) -->
<!-- 假设这里有好几段二级缓存的配置,但是我可能只想用某一个。那就可以通过名字去指定。但是也可以直接使用默认的配置 -->
<!-- 二级缓存也是内存中的一块区域。它能存放多少个对象呢? -->
<!-- maxElementsInMemory最大的元素在内存中的数量,默认是一万个--> <!-- maxElementsInMemory缓存中对象的最大数目 -->
<!-- eternal 设置对象是否是永久的 -->
<!--如果用cache标签就是给它设置一名字 -->
<!-- timeToIdleSeconds 空闲时间 -->
<!-- timeToLiveSeconds 存活的时间 -->
<!-- overflowToDisk 假设maxElementsInMemory="10000",数据库有两万条记录呢 超出内存的区域中是否到硬盘上 是否把你的内存中超出的部分写到硬盘上 超出内存的部分写到硬盘上 如果值为true,可以往硬盘上写了-->
<defaultCache
maxElementsInMemory="5"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
</ehcache>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<diskStore path="c:/ehcache"/><!-- 如果你往硬盘上去写,目标硬盘的路径是java.io.tmpdir java.io.tmpdir是系统临时文件存放的路径 -->
<!-- 默认的cache可以对所有的持久化类(在hibernate.cfg.xml里面配置的持久化类) -->
<!-- 假设这里有好几段二级缓存的配置,但是我可能只想用某一个。那就可以通过名字去指定。但是也可以直接使用默认的配置 -->
<!-- 二级缓存也是内存中的一块区域。它能存放多少个对象呢? -->
<!-- maxElementsInMemory最大的元素在内存中的数量,默认是一万个--> <!-- maxElementsInMemory缓存中对象的最大数目 -->
<!-- eternal 设置对象是否是永久的 -->
<!--如果用cache标签就是给它设置一名字 -->
<!-- timeToIdleSeconds 空闲时间 -->
<!-- timeToLiveSeconds 存活的时间 -->
<!-- overflowToDisk 假设maxElementsInMemory="10000",数据库有两万条记录呢 超出内存的区域中是否到硬盘上 是否把你的内存中超出的部分写到硬盘上 超出内存的部分写到硬盘上 如果值为true,可以往硬盘上写了-->
<defaultCache
maxElementsInMemory="5"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
</ehcache>
day37 05-HIbernate二级缓存:一级缓存更新同步到二级缓存及二级缓存配置文件的更多相关文章
- Hibernate中的一级缓存、二级缓存和懒加载(转)
1.为什么使用缓存 hibernate使用缓存减少对数据库的访问次数,从而提升hibernate的执行效率.hibernate中有两种类型的缓存:一级缓存和二级缓存. 2.一级缓存 Hibenate中 ...
- Hibernate中的一级缓存、二级缓存和懒加载
1.为什么使用缓存 hibernate使用缓存减少对数据库的访问次数,从而提升hibernate的执行效率.hibernate中有两种类型的缓存:一级缓存和二级缓存. 2.一级缓存 Hibenate中 ...
- Hibernate 再接触 一级缓存 二级缓存 查询缓存
缓存 就是把本来应该放在硬盘里的东西放在内存里 将来存内存里读 一级缓存: session缓存 二级缓存: sessionFactory级别的 (适合经常访问,数据量有限,改动不大) 很多的se ...
- Hibernate三种状态,缓存,以及update更新问题
一. Hibernate中对象的三种状态 1. 瞬时状态(transient) 当我们通过Java的new关键字来生成一个实体对象时,这时这个实体对象就处于自由状态,此时该对象只是通过JVM获得了一块 ...
- java-mybaits-00601-查询缓存-一级缓存、二级缓存
1.什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存. 在操作数据库时需要构造 sql ...
- hibernate中的一级缓存与闪照区
首先Hibernate中的一级缓存默认是打开的,并且范围从session创建到session关闭,存储的数据必须是持久态的数据. 1 //从session创建开始,一级缓存也跟着创建 2 Sessio ...
- Mybatis的缓存——一级缓存和源码分析
目录 什么是缓存? 一级缓存 测试一. 测试二. 总结: 一级缓存源码分析: 1. 一级缓存到底是什么? 得出结论: 2. 一级缓存什么时候被创建? 3. 一级缓存的执行流程 结论: 一级缓存源码分析 ...
- 缓存篇~第七回 Redis实现基于方法签名的数据集缓存(可控更新,分布式数据缓存)
返回目录 本篇文章可以说是第六回 Microsoft.Practices.EnterpriseLibrary.Caching实现基于方法签名的数据集缓存(可控更新,WEB端数据缓存)的续篇,事实上,有 ...
- 使用缓存Memcache存储更新微信access token
关键字:Memcache access_token 更新 存储 7200 本文介绍如何使用缓存Memcache存储及更新 access token的方法. 一.Access Token access_ ...
随机推荐
- Mac OS X 下有关adb相关问题
一.什么是adb? ADB的全称是Android Debug Bridge,用来调试Android程序的,白话点就是debug工具! 位置:一般下载Android的SDK时候在platform-too ...
- jeecms v9库内新增对象的流程及其他技巧
cms 开发 ———— 库内新增对象 Products 的流程说明及其他技巧 第一步:Entity com.jeecms.cms.entity.assist.base下建立模型基础类BaseCmsPr ...
- java基础之System类
System类概述System 类包含一些有用的类字段和方法.它不能被实例化. 成员方法 public static void gc()运行垃圾回收器 public static void exit( ...
- 【LGP4705】玩游戏
题目 显然这个题的期望就是逗你玩的,我们算出来总贡献除以\(nm\)就好了 设\(ans_t=\sum_{i=1}^n\sum_{j=1}^n(a_i+b_j)^t\) 二项式定理展开一下 \[ans ...
- css3之 过渡
早期在Web中要实现动画效果,都是依赖于JavaScript或Flash来完成.但在CSS3中新增加了一个新的模块transition,它可以通过一些简单的CSS事件来触发元素的外观变化,让效果显得更 ...
- Qt源码下载
这是官方下载地址:http://qt.nokia.com/downloads 点击右下角的 ftp.qt.nokia.com - Archive You can find our archive of ...
- HBase功能组件
- C/C++ 信号量 CreateSemaphore 用法
HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, // SD LONG lInitialCount, // in ...
- C++ 赋值函数为什么返回reference to *this?
赋值操作为什么要返回 reference to *this? 要弄清这个问题之前,先了解函数的返回值类型:返回值类型,返回引用类型 返回值类型:返回的是一个对象的副本. test operator= ...
- [转]WPF中的ControlTemplate(控件模板)
WPF中的ControlTemplate(控件模板) ...