MyBatis二级缓存的笔记及记录
- 一、什么是二级缓存:
由于一级缓存是一次性的、临时的;每个会话都会创建一个新的;多个会话之间是不能共享的;
二级缓存用于解决一级缓存的不足;每一个“namespace”都会对应一个二级缓存;执行查询的时候先在二级缓存中查找,如果没有再到一级缓存中查找,如果都没有就在DB中获取;会话关闭后才会同步到二级缓存,没有关闭的情况下是不会同步到二级缓存中的;
- 二、二级缓存开启方式:
在接口中添加@CacheNamespace注解即可,注意:这里有个坑,在接口文件中添加注解,与XML配置文件中添加属性是不一样的。这个问题只有在后期研究源码时再分析一下;
- 三、@CacheNamespace注解说明:
1)readWrite:读写模式,True:必须实现序列化接口;
2)flushInterval:刷新时间,单位:毫秒;这里的刷新是指缓存数据的有效期;
3)implementation:缓存实现自定义对象;
4)eviction:缓存策略的算法;
5)size:是引用的缓存结果,这里是指1024次查询的结果,是序列化之后的结果;
6)blocking:防止缓存击穿,对应的实现类:BlockingCache.putObject;
- 四、使用条件:
1)会话提交关闭之后才能填充二级缓存;
2)必须在同一个命名空间下——namespace必须一致;
3)必须是相同的statement,即同一个mapper中的同一个方法;
4)必须是相同的SQL语句和参数;
5)如果readWrite=true(@CacheNamespace(readWrite=true)),实体对象必须实现序列化(Serializable)接口;注意:True与False的区别在于性能,但是也可以忽略不计;
- 五、清除二级缓存的条件
1)XML中配置的Update不能清空@CacheNamespace中的缓存对象;
2)只有修改会话提交后才会执行清空操作;
3)任何一种增删改操作都会清空整个namespace中的缓存;
后续可能持续更新

MyBatis二级缓存的笔记及记录的更多相关文章
- MyBatis一级缓存的笔记及记录
精髓内容来源于<图灵学院> 一.概述: 一级缓存是MyBatis天然自带的,是默认开启且没有关闭的地方,1级缓存只能作用于查询回话中,所以也叫会话缓存: 这里举个例子: 订单表存在一对多的 ...
- 如何细粒度地控制你的MyBatis二级缓存(mybatis-enhanced-cache插件实现)
前几天网友chanfish 给我抛出了一个问题,笼统地讲就是如何能细粒度地控制MyBatis的二级缓存问题,酝酿了几天,觉得可以写个插件来实现这个这一功能.本文就是从问题入手,一步步分析现存的MyBa ...
- Springboot整合Ehcache 解决Mybatis二级缓存数据脏读 -详细
前面有写了一篇关于这个,但是这几天又改进了一点,就单独一篇在详细说明一下 配置 application.properties ,启用Ehcache # Ehcache缓存 spring.cache.t ...
- mybatis二级缓存应用及与ehcache整合
mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓存. 1.开启mybatis的二级缓存 在核心配 ...
- 深入了解MyBatis二级缓存
深入了解MyBatis二级缓存 标签: mybatis二级缓存 2015-03-30 08:57 41446人阅读 评论(13) 收藏 举报 分类: Mybatis(51) 版权声明:版权归博主所 ...
- MyBatis二级缓存配置
正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 Mybatis二级缓存是SessionFactory,如果两次查询基于同一个SessionFactory,那么就从二级缓存 ...
- mybatis二级缓存
二级缓存区域是根据mapper的namespace划分的,相同namespace的mapper查询数据放在同一个区域,如果使用mapper代理方法每个mapper的namespace都不同,此时可以理 ...
- MyBatis 二级缓存全详解
目录 MyBatis 二级缓存介绍 二级缓存开启条件 探究二级缓存 二级缓存失效的条件 第一次SqlSession 未提交 更新对二级缓存影响 探究多表操作对二级缓存的影响 二级缓存源码解析 二级缓存 ...
- Spring Boot 入门(十):集成Redis哨兵模式,实现Mybatis二级缓存
本片文章续<Spring Boot 入门(九):集成Quartz定时任务>.本文主要基于redis实现了mybatis二级缓存.较redis缓存,mybaits自带缓存存在缺点(自行谷歌) ...
随机推荐
- shell练习--PAT题目1008:数组元素循环右移问题 (失败案例,运行超时)
一个数组A中存有N(>)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A ...
- fabric报错:Fatal error: run() received nonzero return code 1 while executing!
今天在使用fabric远程安装rpm时,一直报:Fatal error: run() received nonzero return code 1 while executing! 这看起来也是没笔病 ...
- zookeeper3.5.5集群部署
ZooKeeper是一个为分布式应用所设计的分布的.开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务.ZooKeeper ...
- linux系统安装Oracle11g详细步骤
快速安装指引 ■Reviewing Information About This Guide■Logging In to the System as root 以root用户登录系统■Checking ...
- vue-router(转)——基本使用 + 路由守卫无限循环问题
路由守卫无限循环问题 https://www.jianshu.com/p/1187f8f74a72 学习目的 学习Vue的必备技能,必须 熟练使用 Vue-router,能够在实际项目中运用. Vue ...
- 关于option标签的selected属性
当item的dict_id和custSource一样,那么当前的item的name就被选中并显示在页面 如果直接写selected="selected",就等于直接回显这个集合中最 ...
- activemq 笔记
官网下载好后,修改下conf下activemq.xml配置文件就可以了. 主要将这里的ip改成我们这里用的locahost就可以了: <transportConnectors> <! ...
- 20165218 《网络对抗技术》Exp7 网络欺诈防范
Exp7 网络欺诈防范 基础问题回答 通常在什么场景下容易受到DNS spoof攻击 公共网络下或者同一局域网内: 在日常生活工作中如何防范以上两攻击方法 钓鱼网站 查验可信第三方 核对网站域名 查询 ...
- 第五周学习总结&实验报告(三)
第五周学习总结&实验报告(三) 这一周又学习了新的知识点--继承. 一.继承的基本概念是: *定义一个类,在接下来所定义的类里面如果定义的属性与第一个类里面所拥有的属性一样,那么我们在此就不需 ...
- Oracle数据库用户的密码过期问题处理
SQL> select username, user_id, account_status,expiry_date, profile from dba_users where username ...