废弃
本文废弃,详见下面链接:
https://www.malaoshi.top/show_1IXPEuxjXC.html
二级缓存就是global caching,它超出session范围之外,可以被所有sqlSession共享
在mybatis的配置文件开启二级缓存:
<setting name="cacheEnabled" value="true"/>
在mapper文件中加入以下配置:
<cache />
关于
<cache eviction="LRU" flushInterval="60000" size="1024" readOnly="true" />
这里有几个要注意的地方:
eviction是缓存的淘汰算法,可选值有
"LRU":最近最少使用的:移除最长时间不被使用的对象
"FIFO":先进先出:按对象进入缓存的顺序来移除它们
"SOFT":软引用:移除基于垃圾回收器状态和软引用规则的对象
"WEAK": 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象
缺省值是LRU
flashInterval指缓存过期时间,单位为毫秒,60000即为60秒,缺省值为空,即只要容量足够,永不过期
size指缓存多少个对象,默认值为1024
readOnly是否只读,如果为true,则所有相同的sql语句返回的是同一个对象(有助于提高性能,但并发操作同一条数据时,可能不安全),如果设置为false,则相同的sql,后面访问的是cache的clone副本。
需要注意的是global caching的作用域是针对Mapper的Namespace而言的,也就是说只在有在这个Namespace内的查询才能共享这个cache
---------------------------------------------------------------
<select ... userCache="false">
useCache属性,默认为true,即开启二级缓存。通过该属性可以局部控制,比如设置userCache="false"禁用二级缓存
useCache="false"表示该select语句不使用缓存(即使xml最开头的全局cache启用)
---------------------------------------------------------------
默认情况下,如果全局开启了缓存,insert/update/delete成功后,会自动刷新相关的缓存项
flushCache属性,默认为true
(1)当为select语句时:
flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。
(2)当为insert、update、delete语句时:
flushCache默认为true,表示任何时候语句被调用,都会导致本地缓存和二级缓存被清空。
<insert ... flushCache='true'>
一般执行inser操作时,需要刷新缓存,否则会新插入的数据查询不出来。
二级缓存的危害,参看以下文章:
http://blog.csdn.net/isea533/article/details/44566257
参考文章,非常感谢:
http://www.cnblogs.com/QQParadise/articles/5109633.html
http://blog.csdn.net/lycemail/article/details/50923245
http://www.360doc.com/content/15/1205/07/29475794_518018352.shtml