设为首页 收藏本站
查看: 1343|回复: 0

[经验分享] MyBatis缓存

[复制链接]

尚未签到

发表于 2016-11-24 04:42:44 | 显示全部楼层 |阅读模式
MyBatis缓存

介绍:   

      正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持。


  • 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空。
  • 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。
  • 对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存Namespaces)的进行了 C/U/D 操作后,默认该作用域下所有 select 中的缓存将被clear。


一级缓存: 


  •  MyBatis的一级缓存指的是在一个Session域内,session为关闭的时候执行的查询会根据SQL为key被缓存(跟mysql缓存一样,修改任何参数的值都会导致缓存失效)
  • 一级缓存是默认开启的,由于我们在使用的过程中会交给spring进行管理session。在进行操作时,spring会自动开启、关闭session。所以在项目有没有使用到一级缓存。
  • 由于没有使用到,这次就没有对一级缓存进行测试。


二级缓存:


  • MyBatis的二级缓存需要手动开启。它的作用域是
  • 在MyBatis配置文件中加入
    <setting name="cacheEnabled" value="true"/> 
  • 在对应的Mapper.xml中也需要开启
        <cache
    eviction="FIFO"    <!--回收策略为先进先出-->
    flushInterval="60000"   <!--自动刷新时间为60s-->
    size="512"   
    readOnly="true" />
  •  在对MyBatis的二级缓存测试时,我们需要在查询的时候打印mysql日志。
  • 首先要保证所需要的jar存在,slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar slf4j-simple-1.6.1.jar 三个jar要保持版本的一致。
  • 把log的日志级别调到debug,并加入以下配置
    log4j.logger.java.sql.ResultSet=INFO
    log4j.logger.org.apache=INFO
    log4j.logger.java.sql.Connection=DEBUG
    log4j.logger.java.sql.Statement=DEBUG
    log4j.logger.java.sql.PreparedStatement=DEBUG 
  • 测试查询结果,第一次出现了查询语句,当再次查询时,将不发出查询语句。
    ==>  Preparing: select id, name, pid, url, type,creater,modifier,create_time,modify_time,deleteState from menu where 1=1 and deletestate='0' and pid = '0'  |
    ooo Using Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@293354] |
    ==> Parameters:  |
    ==>  Preparing: select id, name, pid, url, type,creater,modifier,create_time,modify_time,deleteState from menu where 1=1 and deletestate='0' and pid = '0'  |
    ==> Parameters:  |
    <==      Total: 3 |
    <==      Total: 3 |


总结:


  • 在使用二级缓存时,需要保证这个namespace中所操作的表不能在其它namespace中进行更新操作。(只有这样才能保持数据的一致性)
  • 在进行insert、update、delete操作时,会清处当前namespace下的所有缓存。
  • 如果有两个namespace对同一张表有更新操作,那么就会造成数据的不一致性。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-304520-1-1.html 上篇帖子: 6、mybatis 下篇帖子: MyBatis 初探
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表