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_ ...
随机推荐
- spss-数据抽取-拆分与合并
spss-数据抽取-拆分与合并 数据抽取也成为数据拆分,是指保留.抽取原数据表中某些字段.记录的部分信息,形成一个新字段.新纪录.分为:字段拆分和随机抽样两种方法. 一:字段拆分 如何提取" ...
- Lint found fatal errors while assembling a release target问题的解决方案
此问题发生在编译为 release 版本时,出现错误提示如下: Lint found fatal errors while assembling a release target. To procee ...
- c# asp.net 修改webconfig文件 配置
#region 修改config文件 /// <summary> /// 修改config文件(AppSetting节点) /// </summary> /// <par ...
- Top- Linux必学的60个命令
1.作用 top命令用来显示执行中的程序进程,使用权限是所有用户. 2.格式 top [-] [d delay] [q] [c] [S] [s] [i] [n] 3.主要参数 d:指定更新的间隔,以秒 ...
- 实战课堂 | MongoDB如何使用内存?内存满了怎么破?
最近接到多个MongoDB内存方面的线上case及社区问题咨询,主要集中在: 为什么我的 MongoDB 使用了 XX GB 内存? 一个机器上部署多个 Mongod 实例/进程,WiredTiger ...
- git简单使用命令
每次都会忘记git使用命令 在本上做了笔记,网上也备份一份吧 这个是删除步骤: 拉取远程的Repo到本地(如果已经在本地,可以略过) $ git clone xxxxxx 在本地仓库删除文件 $ g ...
- java中通过jacob调用dts进行数据导入导出
在一个项目中需要金蝶软件对接,但是业务服务器和财务服务器相隔很远(中间经过好几台服务器,有内网也有外网),从一个内网向另一个内网中传输时,需要外网辅助,因为不让原始数据受污染,使用了DTS数据同步到另 ...
- 499 单词计数 (Map Reduce版本)
原题网址:https://www.lintcode.com/problem/word-count-map-reduce/description 描述 使用 map reduce 来计算单词频率http ...
- JEECMS自定义标签
查看JEECMS的源代码发现开发者版本还没有类似现成的统计标签,一种解决的办法是使用现有的JEECMS标签,像这样Struts( [@cms_content_list channel=id]${tag ...
- dom4j和document
DOM的优点和缺点: 优点:DOM操作思维清晰,简单 缺点:在操作大量数据的时候性能,不能保证 DOM(Document Object Model) // 表示出需要被操作的XML文件的路径,注意是文 ...