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中的缓存;
后续可能持续更新
最新文章
- VS2010 VS2012 VS2013 VS2015启动调试时老是提示正在下载公共符号
- 带你玩转JavaWeb开发之五-如何完成响应式开发页面
- “iTunes无法连接iPad,因为设备超时”解决办法
- Value must be an existing directory配置tomcat问题
- java 27 - 8 反射之 通过反射来设置某个对象的某个属性为指定值
- windows递归拷贝(或删除等操作)文件
- style在进行图形绘制前,要设置好绘图的样式
- 算法导论:Trie字典树
- [GCJ]Password Attacker
- maven小试牛刀
- 宿主进程 vshost.exe
- android EditText设置光标、边框和图标
- <;runtime>; 的 <;assemblyIdentity>; 元素和<;bindingRedirect>; 元素
- poj2871
- 储存过程嵌套临时表同名引发的BUG?
- php中json对象数据的输出转化
- Web服务cxf框架发布2
- 闲话ACES(修订)
- RabbitMQ消息的交换
- 代码d17