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中的缓存;
后续可能持续更新
推荐阅读
-
mysql自联去重的一些笔记记录
-
MVC项目结构搭建及单个类的实现学习笔记1
-
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
-
Mybatis的mapper文件中$和#的用法及区别详解
-
win7系统鼠标指针乱动怎么办?笔记本win7系统鼠标指针乱动的六种原因及解决方法
-
如何清除自己打开过的文件及看过电影的历史记录
-
.Net WInform开发笔记(二)Winform程序运行结构图及TCP协议在Winform中的应用
-
怎么删除浏览器记录 如何删除IE上记录的帐号及密码
-
Android笔记之:App模块化及工程扩展的应用
-
Python字符串特性及常用字符串方法的简单笔记