网站建设客户需要提供什么,dreamware做网站,万载网站建设,node.js做企业网站文章目录 缓存-提高检索效率的利器缓存-官方文档二级缓存基本介绍二级缓存原理图 二级缓存快速入门快速入门注意事项和使用陷阱理解二级缓存策略的参数 四大策略如何禁用二级缓存mybatis 刷新二级缓存的设置 缓存-提高检索效率的利器
缓存-官方文档
文档地址: https://mybati… 文章目录 缓存-提高检索效率的利器缓存-官方文档二级缓存基本介绍二级缓存原理图 二级缓存快速入门快速入门注意事项和使用陷阱理解二级缓存策略的参数 四大策略如何禁用二级缓存mybatis 刷新二级缓存的设置 缓存-提高检索效率的利器
缓存-官方文档
文档地址: https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#cache
二级缓存
基本介绍
二级缓存和一级缓存都是为了提高检索效率的技术。最大的区别就是作用域的范围不一样一级缓存的作用域是sqlSession 会话级别,在一次会话有效而二级缓存作用域是全局范围针对不同的会话都有效。
二级缓存原理图 二级缓存快速入门
快速入门
mybatis-config.xml 配置中开启二级缓存
!--引入外部的jdbc.properties--properties resourcejdbc.properties/!--配置MyBatis自带的日志输出-查看原生的sql--settingssetting namelogImpl valueSTDOUT_LOGGING/!--1、全局性地开启或关闭所有映射器配置文件中已配置的任何缓存, 可以理解这是一个总开关2、默认就是: true--setting namecacheEnabled valuetrue//settings使用二级缓存时entity 类实现序列化接口(serializable)因为二级缓存可能使用到序列化技术。不一定要实现只是有的外部缓存需要。 在对应的XxxMapper.xml 中设置二级缓存的策略 ?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd!--解读
1. 这是一个mapper xml 文件
2. 该文件可以去实现对应的接口的方法
3. namespace 指定该xml文件和哪个接口对应!!!
--
mapper namespacecom.nlc.mapper.MonsterMapper!--1、配置二级缓存 是mybatis自带2、FIFO – 先进先出按对象进入缓存的顺序来移除它们。3. flushInterval 刷新间隔 是毫秒单位 60000 表示 60s4. size512: 引用数目, 属性可以被设置为任意正整数, 默认10245. readOnlytrue: (只读属性可以被设置为 true 或 false: 如果我们只是用于读操作,建议设置成 true, 这样可以提示效率, 如果有修改操作设置成 false, 默认就是false--cache evictionFIFO flushInterval60000 size512 readOnlytrue//mapper修改MonsterMapperTest.java , 完成测试 //测试二级缓存的使用Testpublic void level2CacheTest() {//查询id3的monsterMonster monster monsterMapper.getMonsterById(3);System.out.println(monster monster);//这里关闭sqlSessionif (sqlSession ! null) {sqlSession.close();}//重新获取sqlSessionsqlSession MyBatisUtils.getSqlSession();//重新获取了monsterMappermonsterMapper sqlSession.getMapper(MonsterMapper.class);//再次查询id3的monsterSystem.out.println(--虽然前面关闭了sqlSession,因为配置二级缓存, 当你再次查询相同的id时, 依然不会再发出sql, 而是从二级缓存获取数据----);Monster monster2 monsterMapper.getMonsterById(3);System.out.println(monster2 monster2);Monster monster3 monsterMapper.getMonsterById(3);System.out.println(monster3 monster3);if (sqlSession ! null) {sqlSession.close();}}注意事项和使用陷阱
理解二级缓存策略的参数
cache evictionFIFO flushInterval30000 size360 readOnlytrue/上面的配置意思如下 创建了FIFO 的策略每隔30 秒刷新一次最多存放360 个对象而且返回的对象被认为是只读的。 eviction缓存的回收策略 flushInterval:时间间隔单位是毫秒 size引用数目内存大就多配置点要记住你缓存的对象数目和你运行环境的可用内存 资源数目。默认值是1024 readOnly:true,只读
四大策略
√ LRU – 最近最少使用的:移除最长时间不被使用的对象它是默认 √ FIFO – 先进先出:按对象进入缓存的顺序来移除它们。 √ SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。 √ WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
如何禁用二级缓存
一、修改resources\mybatis-config.xml
settingssetting namelogImpl valueSTDOUT_LOGGING/!--全局性地开启或关闭所有映射器配置文件中已配置的任何缓存, 默认就是true--setting namecacheEnabled valuefalse/
/settings 二、修改mapper\MonsterMapper.xml取消缓存
!--cache evictionFIFO flushInterval30000 size360 readOnlytrue/-- 三、或者更加细粒度的, 在配置方法上指定useCache“false”
设置useCachefalse 可以禁用当前select 语句的二级缓存即每次查询都会发出sql 去查询默认情况是true即该sql 使用二级缓存。 注意一般我们不需要去修改使用默认的即可。
mybatis 刷新二级缓存的设置
可以在实现方法上配置刷新缓存flushCache“true”
update idupdateMonster parameterTypeMonster flushCachetrue
UPDATE mybatis_monster SET NAME#{name},age#{age} WHERE id#{id}
/updateinsert、update、delete 操作数据后需要刷新缓存如果不执行刷新缓存会出现脏读。 默认为true默认情况下为true 即刷新缓存一般不用修改。