精华内容
下载资源
问答
  • mybatis二级缓存设置
    2019-10-09 14:18:53

    缓存

    什么是缓存
    	存储在运行内存中的数据 -- 缓存数据
    
    	计算机的存储方式效率不高,因此会将一些数据放在内存中
    		- 数据的清空机制
    		- 数据的复用机制
    
    为什么要用缓存
    	部分数据不要求实时性,并且使用频率较高,可以将此数据缓存到内存中
    

    一级缓存

    事务缓存 sqlsession
    mybatis默认开启了一级缓存
    在同一个事务中,默认将sql查询结果进行缓存,如果之后还需要执行相同的sql语句,默认不会再次查询
    如果保存查询结果之后,进行了相关表的更新操作(添加,删除,修改),清空之前保存的数据
    

    二级缓存

    应用级缓存
    同一个configuration对象中有效
    缓存所有的查询结果,更新操作会刷新缓存结果
    

    实现步骤

    1、开启mybatis二级缓存,需要在configuration配置文件中进行配置
    <settings>
       <!-- 开启二级缓存  默认值为true -->
    	<setting name="cacheEnabled" value="true"/>
    </settings>
    
    2、需要保存的对象都必须实现序列化接口
    	Serializable
    
    3、需要mapper配置文件中进行缓存设置
    	
        eviction:代表的是缓存回收策略,目前MyBatis提供以下策略。
        (1) LRU,最近最少使用的,一处最长时间不用的对象
        (2) FIFO,先进先出,按对象进入缓存的顺序来移除他们
        (3) SOFT,软引用,移除基于垃圾回收器状态和软引用规则的对象
        (4) WEAK,弱引用,更积极的移除基于垃圾收集器状态和弱引用规则的对象。这里采用的是LRU,
                移除最长时间不用的对形象
    
        flushInterval:刷新间隔时间,单位为毫秒,这里配置的是100秒刷新,如果你不配置它,那么当
        SQL被执行的时候才会去刷新缓存。
    
        size:引用数目,一个正整数,代表缓存最多可以存储多少个对象,不宜设置过大。设置过大会导致内存溢出。
        这里配置的是1024个对象
    
        readOnly:只读,意味着缓存数据只能读取而不能修改,这样设置的好处是我们可以快速读取缓存,缺点是我们没有
        办法修改缓存,他的默认值是false,不允许我们修改
    <cache eviction="LRU" flushInterval="100000" readOnly="true" size="1024"/>
    

    三级缓存

    一般会采用NoSQL数据库进行缓存操作
    将查询结果存储到NoSQL数据库 - 散列算法(目前查询效率最高的算法)
    Redis
    
    更多相关内容
  •  Mybatis提供对缓存的支持,但是在没有配置的默认情况下,它只开启一级缓存,二级缓存需要手动开启。  一级缓存只是相对于同一个SqlSession而言。也就是针对于同一事务,多次执行同一Mapper的相同查询方法,第一...
  • mybatis二级缓存配置

    千次阅读 2019-03-07 11:03:59
    对于访问多的查询请求且用户对查询结果实时性要求不高,此时可采用mybatis二级缓存技术降低数据库访问量,提高访问速度,业务场景比如:耗时较高的统计分析sql、电话账单查询sql等。实现方法如下:通过设置刷新间隔...

    一、应用场景

    对于访问多的查询请求且用户对查询结果实时性要求不高,此时可采用mybatis二级缓存技术降低数据库访问量,提高访问速度,业务场景比如:耗时较高的统计分析sql、电话账单查询sql等。实现方法如下:通过设置刷新间隔时间,由mybatis每隔一段时间自动清空缓存,根据数据变化频率设置缓存刷新间隔flushInterval,比如设置为30分钟、60分钟、24小时等,根据需求而定。

    二、开启二级缓存

    mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的全局总开关,还要在具体的mapper.xml中启用二级缓存。

    开启全局总开关:

    在mapper.xml中启用二级缓存:

    mybatis默认方式

    与第三方分布式缓存框架(如redis、memcached和ehcache)集成方式

    注意:

    二级缓存需要将查询结果映射到POJO对象时,POJO对象需要实现java.io.Serializable接口,进行序列化和反序列化操作。如果存在父类、成员POJO都需要实现序列化接口。

    三、禁用二级缓存和刷新缓存

    例子:

    1、useCache配置禁用二级缓存:

    在statement中设置useCache=false可以禁用当前select语句的二级缓存,即每次查询都会发出sql去查询,默认情况是true,即该sql使用二级缓存。

    场景:针对每次查询都需要最新的数据sql,要设置成useCache=false,禁用二级缓存。

    2、设置statement配置中的flushCache=true 属性,可刷新缓存。

    四、Mybatis Cache参数

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

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

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

    如下例子:

    <cache  eviction='FIFO' flushInterval='60000'  size='512' readOnly='true'/>

    这个更高级的配置创建了一个 FIFO 缓存,并每隔 60 秒刷新,存数结果对象或列表的 512 个引用,而且返回的对象被认为是只读的,因此在不同线程中的调用者之间修改它们会导致冲突。可用的收回策略有, 默认的是 LRU:

    1.      LRU – 最近最少使用的:移除最长时间不被使用的对象。

    2.      FIFO – 先进先出:按对象进入缓存的顺序来移除它们。

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

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

    五、参考资料

    《深入理解mybatis原理》 MyBatis的二级缓存的设计原理

    http://blog.csdn.net/luanlouis/article/details/41408341

    展开全文
  • 1.Mybatis二级缓存使用简介: 1.1:开启全局二级缓存配置:<setting name="cacheEnabled" value="true"></setting> 1.2:在对应的xxxmapper.xml文件加入<cache/>标签 注意:二级缓存是基于...

    1.Mybatis二级缓存使用简介:

            1.1:开启全局二级缓存配置:<setting name="cacheEnabled" value="true"></setting> 

            1.2:在对应的xxxmapper.xml文件加入<cache/>标签

      注意:二级缓存是基于命名空间namespace的,一级缓存是基于sqlSession的,也就是与数据库之间的一次会话。

                    1.2.1:cache的相关属性介绍:

                         eviction: 缓存的回收策略

                                     LRU(默认):最近最少使用,移除最长时间不被使用的对象

                                     FIFO:先进先出,安对象进入缓存的顺序来移除它们

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

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

                        flushInterval:缓存刷新间隔 缓存多长时间清空一次,默认不清空,设置一个毫秒值

                        readOnly:是否只读 。

                                            true:只读,mybatis认为所有从缓存中获取数据的操作都是只读操作,不会修改数据。 mybatis为了加快获取速度,直接会将数据在缓存中的引用交给用户,不                                                      安全,但速度快。

                                             false:非只读,mybatis觉得获取的数据可能会被修改 mybatis会利用序列化&反序列化的技术克隆一份新的数据给你,安全,但速度慢。

                        size:缓存最多存放多少个引用。

                        type:指定自定义缓存的全类名,实现Mybatis提供的Cache接口即可。

          1.3:因为上面说到mybatis会用到序列化&反序列化技术克隆一份新的数据,所以对应的pojo需要实现序列化

            

     2.mybatis二级缓存失效的原因

            2.1:下面这篇博客个人觉得已经总结的很全面了,传送门:

                    转载:https://www.cnblogs.com/DoubleEggs/p/6243223.html

            2.2:补充一个比较简单但有时候比较容易忽略的场景(亲身经历):

                     自己写了一个工具类,来获取sqlSession,但是每次获取sqlSession的时候,都会重新加载mybatis全局配置文件,创建一个新的sqlSessionFactory,sqlSessionFactory不同自然也会导致二级缓存失效:

                    

     

     

     

     

    展开全文
  • 什么是缓存? 简单来讲,缓存就是存储在缓冲区里的内容,或者可以理解为...Mybatis的缓存分为一级缓存和二级缓存。一级缓存是默认开启的,二级缓存需要手动开启。 一级缓存是SqlSession级别的缓存,作用域是一个SqlSess

    什么是缓存?

    简单来讲,缓存就是存储在缓冲区里的内容,或者可以理解为存在内存中的内容。用户可以将经常查询的内容放到缓存中,再次使用时直接从缓存中取值,而不需要再查询数据库。这样做的优点是响应迅速,减少了系统资源(网络资源、CPU资源等)开销;缺点是需要占用内存资源,服务器一旦关机,缓存就会丢失,重启后需要重新将写一遍数据到内存。

    Mybatis的缓存
    Mybatis的缓存分为一级缓存和二级缓存。一级缓存是默认开启的,二级缓存需要手动开启。

    一级缓存是SqlSession级别的缓存,作用域是一个SqlSession。在同一个SqlSession中,执行相同的查询sql,第一次会先去查询数据库,并写入缓存。第二次再执行时,则直接从缓存中取数据。如果两次执行查询sql的中间执行了增删改操作,则会清空该SqlSession的缓存。

    二级缓存是mapper级别的缓存。作用域是是mapper的同一个namespace下的sql语句。第一次执行查询SQL时,会将查询结果存到二级缓存区域内。第二次执行相同的查询SQL,则直接从缓存中取出数据。如果两次执行查询sql的中间执行了增删改操作,则会清空该namespace下的二级缓存。

    1、开启二级缓存

    (1) 修改resources目录下的application.properties配置文件,加入开启mybatis二级缓存的配置和打印执行sql的配置

    # 开启mybatis的二级缓存
    mybatis.configuration.cache-enabled=true
    
    # 开启sql打印
    logging.level.com.batis.mapper=debug
    

    (2) 修改resources目录下mapping目录对应的Mapper文件

    <!-- 开启二级缓存 -->
    <cache eviction="LRU" flushInterval="100000" readOnly="true" size="1024">
    </cache>
    

    说明:
    eviction: 回收策略
    LRU 最近最少使用的,移除最长时间不被使用的对象,这是默认值
    FIFO 先进先出,按对象进入缓存的顺序来移除它们
    SOFT 软引用,移除基于垃圾回收器状态和软引用规则的对象
    WEAK 弱引用,更积极的移除基于垃圾收集器状态和弱引用规则的对象

    flushInterval: 刷新间隔,以毫秒为单位,100000表示每100秒刷新一次缓存。不设置的话,则每次调用语句时刷新。

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

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

    (3) 实体对象要implements Serializable,否则报错

    public class User implements Serializable{
    
    }
    

    (4) 启动工程,如果出现

    Cache Hit Ratio . #表示缓存开启了.....
    

    2、启动batis项目并使用postman工具进行测试
    查询用户:
    在这里插入图片描述

    打印sql日志,可以看到详细的查询过程(红框),第一次查询时调用了查询语句,后面绿框中的是多次查询,没有调用查询语句,而是直接取缓存的值;100秒之后再进行第二次查询,又重新调用了查询语句,并且多次查询后是从缓存取出值。:

    插入用户并执行查询:
    在这里插入图片描述

    从上图的执行结果可以看到,先进行查询操作,查询结果更新到缓存,后面的几次查询都是直接从缓存取值。之后执行一个插入用户的操作,再多次执行查询操作的时候,会先调用一次查询语句将查询结果写入缓存,后面的几次操作就会直接从缓存取值。

    至此Springboot集成Mybatis的二级缓存内容已经全部讲完,测试也都完全符合预期!
    有可以改进的地方希望诸位同学不要吝惜笔墨,加以指正,万分感谢!

    参考文章链接:https://blog.csdn.net/huanongying123/article/details/104293908

    展开全文
  • --mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version>
  • 与大多数持久层框架一样,MyBatis也提供了缓存机制,通过缓存机制...1、首先在mybatis配置文件的节点中配置整体开启二级缓存。 <settings> <!-- 开启日志 --> <setting name="logImpl" value="STDOU.
  • 文章目录系列文章目录前言二、mybatis二级缓存:出现的原因:二级缓存介绍:二级缓存清除策略:事务管理策略:二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工...
  • mybatis二级缓存参数

    2020-11-19 18:29:07
    eviction:代表的是缓存回收策略,目前MyBatis提供以下策略。 (1) LRU,最近最少使用的,一处最长时间不用的对象 (2) FIFO,先进先出,按对象进入缓存的顺序来移除他们 (3) SOFT,软引用,移除基于垃圾回收器状态和软...
  • Mybatis二级缓存

    2021-01-16 00:21:13
    Mybatis的查询缓存总共有两级,我们称之为一级缓存和二级缓存,如图:一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的...
  • 主要给大家深入的介绍了关于MyBatis中一级缓存与二级缓存的相关资料,文中详细介绍MyBatis中一级缓存与二级缓存的工作原理及使用,对大家具有一定的参考性学习价值,需要的朋友们下面来一起看看吧。
  • MyBatis 二级缓存全详解

    千次阅读 2021-01-27 09:19:00
    我们在上一篇文章 ( https://mp.weixin.qq.com/s/4Puee_pPCNArkgnFaYlIjg ) 介绍了 MyBatis 的一级缓存的...MyBatis 二级缓存介绍上一篇文章中我们介绍到了 MyBatis 一级缓存其实就是 SqlSession 级别的缓存,什么...
  • 1.缓存的概念(cache) cache缓存是高速缓冲寄存器,解决频繁操作(访问)数据的问题。 两个应用软件或者是硬件之间...#开启mybatis二级缓存,application.properties文件中添加 mybatis.configuration.cache-enab
  • 第一步:在mybatis的全局配置文件中配置Setting属性,设置名为 cacheEnabled 的属性值为 true 即可。...在具体需要二级缓存的mapeer映射文件中开启二级缓存,值需要在相应的映射文件中添加一个cache标签即可 ...
  • 主要介绍了mybatis plus使用redis作为二级缓存的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 次以后则直接去一级缓存中取。 当执行的SQL查询中间发生了增删改的操作,mybatis会把SqlSession的缓存清空。 一级缓存失效的情况 SqlSession不同; SqlSession相同,查询条件不同。因为缓存条件不同,缓存中还...
  • mybatis 一级缓存和二级缓存

    千次阅读 2022-04-05 22:13:22
    配置mybatis maven: <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> &...
  • mybatis二级缓存

    2021-12-18 09:45:19
    一、使用echache作为二级缓存 1.导入echache相关依赖 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>...
  • 一级缓存 与springboot集成时一级缓存不生效原因以及解决方案 如何解决这个问题? 要知道如何解决这个问题, ...二级缓存 ...为什么mybatis默认不开启二级缓存? 不推荐使用。 ...
  • springboot 配置mybatis二级缓存机制 一级缓存 是sqlSession级别的缓存,面向单个访问用户 二级缓存 是namespace级别的缓存,同一个namespace内查询会缓存,一旦发生增删改操作则会清空该namespace缓存,二级缓存...
  • mybatis二级缓存详解

    2021-01-13 10:31:41
    一、创建Cache的完整过程 我们从SqlSessionFactoryBuilder解析mybatis-config.xml配置文件开始: Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); S...
  • 主要介绍了Mybatis-plus基于redis实现二级缓存过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • MyBatis二级缓存

    2021-06-28 11:39:14
    Myabtis包含一级缓存及二级缓存,一级缓存是基于SqlSession的(SqlSession间隔离)而二级...4.debug查看Mybatis源码了解Mybatis二级缓存底层数据结构(HashMap)及工作模式 本文只涉及二级缓存,更多了解一级缓存..
  • 配置二级缓存2.2.分开关2.3.实体类实现序列化接口2.4.测试方法3.cache有一些可选的属性3.1.type3.2.eviction3.3.flushInterval3.4.size3.5 readOnly3.6 blocking4.MyBatis的缓存机制整体设计以及二级缓存的工作模式5...
  • mybatis二级缓存简单理解

    千次阅读 2020-09-18 12:56:03
    上次谈到了 mybatis一级缓存实际上是SqlSession级别的缓存,多个SqlSession并不共享,针对这种情况,我们可以使用mybatis二级缓存来处理。 1.mybatis二级缓存是什么 mybatis二级缓存是mybatis的另一种缓存机制,...
  • myBatis二级缓存配置

    2020-09-07 22:42:24
    一级缓存: 一级缓存不能关闭,但可以配置一级缓存的作用域。 一级缓存默认开启: <setting name="localCacheScope" value="SESSION"/>...localCacheScope:value有两个SESSION(默认)、...开启二级缓存:..
  • springboot+redis配置mybatis二级缓存

    千次阅读 2019-05-27 19:37:54
    springboot+mybatis集+redis 二级缓存 每天多学一点点~ ...文章目录springboot+mybatis集+redis 二级缓存1.mybatis一二级缓存2.sprongboot配置mybatis3.springboot配置redis4.redis集成mybatis二级缓存5.测试6....
  • 二级缓存中有一个属性为readOnly 官网的解释如下: readOnly(只读)属性可以被设置为 true 或 false。 1.(true)只读的缓存会给所有调用者返回缓存对象的相同实例。 因此这些对象不能被修改。这就提供了可观的性能...
  • Mybatis一级缓存(默认开启) 是SqlSession级别的缓存, 默认开启 Mybatis二级缓存(默认关闭,一般不建议使用) namspace/mapper级别(跨sqlSession)的缓存, 默认关闭

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,006
精华内容 18,402
关键字:

mybatis二级缓存配置