专栏首页Java架构师进阶Mybatis的二级缓存配置

Mybatis的二级缓存配置

一个项目中肯定会存在很多共用的查询数据,对于这一部分的数据,没必要

每一个用户访问时都去查询数据库,因此配置二级缓存将是非常必要的。

Mybatis的二级缓存配置相当容易,要开启二级缓存,只需要在你的Mapper

映射文件中添加一行:

它将采用默认的行为进行缓存:

 映射文件中所有的select语句将被缓存

 映射文件中所有的insert、update和delete语句将刷新缓存 

 缓存将使用LRU(Least Recently Used)最近最少使用策略算法来回收

 刷新间隔(no Flush Interval,没有刷新间隔),缓存不会以任何时间顺序来刷新

 缓存会存储列表集合和对象(无论查询方法返回什么)的1024个引用 

 缓存会被视为read/write(可读/可写)的缓存,意味着对象检索不是共享的,而且可以安全的被调用者修改,而不干扰其他调用者或者线程所做的潜在修改

所有这些属性都可以通过缓存元素的属性来修改,比如: 

 eviction="FIFO"  

 flushInterval="10800000"  size="512" 

 readOnly="true"  

/> 

这个更高级的配置创建了一个FIFO缓存,并每隔3个小时刷新缓存,储存结

果对象或列表的512个引用,而且返回的对象被认为是只读的,因此在不同线程中的调用者之间修改他们会导致冲突。

可用的收回策略有:

【默认】LRU——最近最少使用的:移除最长时间不被使用的对象 

 FIFO——先进先出的:按对象进入缓存的顺序来移除他们 

 SOFT——软引用:移除基于垃圾回收器状态和软引用规则的对象 

 WEAK——弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。

flushInterval(刷新间隔)可以被设置为任意的正整数(60*60*1000这种形式是不允许的),而且它们代表一个合理的毫秒形式的时间段。默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新。

size(引用数目)可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的可用内存资源数目。默认值是1024.

readOnly(只读)属性可以被设置为true或false。只读的缓存会给所有调用者返回缓存对象的相同实例,因此这些对象不能被修改,这提供了很重要的性能优势。可读写的缓存会返回缓存对象的拷贝(通过发序列化)。这会慢一些,但是安全,因此默认是false。

配置完表示该mapper映射文件中,所有的select语句都将被缓存,所有的insert、update和delete语句都将刷新缓存。但是实际中,我们并是希望这样,有些select不想被缓存时,可以添加select的属性useCache=“false”;有些insert、update和delete不想让他刷新缓存时,添加属性flushCache=”false ”。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MyBatis一级缓存原理解析

    MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓存机制上。MyBatis提供了一级缓存、二级缓存 这两个缓存机制,能够很...

    java架构师
  • 稳了!这才是cookie,session与token的真正区别

    1、很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, ...

    java架构师
  • 怎么从初、中级Java程序员过渡到高级Java程序员?

    原文地址:https://www.toutiao.com/i6599524702937416195/

    java架构师
  • Android RxJava 实战系列:从磁盘 / 内存缓存中 获取缓存数据

    Carson_Ho的Github地址 = RxJava2实战系列:从磁盘 / 内存缓存中 获取缓存数据

    Carson.Ho
  • Mysql-16-缓存的配置和使用

      在mysql服务器高负载的情况下,必须采取一种措施给服务器减轻压力,减少服务器的I/O操作。一般采用的方法是优化sql操作语句,优化服务器的配置参数,从而提...

    用户1173509
  • Java数据类型 拆箱和装箱

    解释缓存范围 Integer.valueOf()方法基于减少对象创建次数和节省内存的考虑,缓存了[-128,127]之间的数字。此数字范围内传参则直接返回缓存...

    瑞新
  • 缓存穿透了怎么办?

    在缓存命中率低的情况下,大量查询请求会穿透缓存到数据库,因为数据库对于并发的承受能力有限,一旦数据库承受不了大量查询任务,就会导致查询变慢,导致大量的请求阻塞在...

    王小明_HIT
  • 浏览器 HTTP 协议缓存机制详解

    最近在准备优化日志请求时遇到了一些令人疑惑的问题,比如为什么响应头里出现了两个 cache control、为什么明明设置了 no cache 却还是发请求,为...

    用户1177713
  • 国内一个款不错的二级缓存框架J2Cache

    缓存技术在软件开发中已经无处不在,今天分享一款国内开源的相当不错的缓存框架J2Cache 。J2Cache 是 OSChina 目前正在使用的两级缓存框架(要求...

    java乐园
  • angularjs 缓存详解

    一、什么是缓存 一个缓存就是一个组件,它可以透明地存储数据,以便未来可以更快地服务于请求。 缓存能够服务的请求越多,整体系统性能就提升得越多。 二、Angula...

    柴小智

扫码关注云+社区

领取腾讯云代金券