`
steveoyung
  • 浏览: 29172 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

MyBatis 缓存机制深度解剖 / 自定义二级缓存

 
阅读更多

缓存概述 

    • 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持;
    • 一级缓存基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空。
    • 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache、Hazelcast等。
    • 对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存Namespaces)的进行了 C/U/D 操作后,默认该作用域下所有 select 中的缓存将被clear。
    • MyBatis 的缓存采用了delegate机制 及 装饰器模式设计,当put、get、remove时,其中会经过多层 delegate cache 处理,其Cache类别有:BaseCache(基础缓存)、EvictionCache(排除算法缓存) 、DecoratorCache(装饰器缓存):
    •           

BaseCache         :

      为缓存数据最终存储的处理类,默认为 PerpetualCache,基于Map存储;可自定义存储处理,如基于EhCache、Memcached等; 

 

                

EvictionCache    :

      当缓存数量达到一定大小后,将通过算法对缓存数据进行清除。默认采用 Lru 算法(LruCache),提供有 fifo 算法(FifoCache)等; 

 

                

DecoratorCache:

    缓存put/get处理前后的装饰器,如使用 LoggingCache 输出缓存命中日志信息、使用 SerializedCache 对 Cache的数据 put或get 进行序列化及反序列化处理、当设置flushInterval(默认1/h)后,则使用 ScheduledCache 对缓存数据进行定时刷新等。
  • 一般缓存框架的数据结构基本上都是 Key-Value 方式存储,MyBatis 对于其 Key 的生成采取规则为:[hashcode : checksum : mappedStementId : offset : limit : executeSql : queryParams]。
  • 对于并发 Read/Write 时缓存数据的同步问题,MyBatis 默认基于 JDK/concurrent中的ReadWriteLock,使用ReentrantReadWriteLock 的实现,从而通过 Lock 机制防止在并发 Write Cache 过程中线程安全问题。


源码剖解 
接下来将结合 MyBatis 序列图进行源码分析。在分析其Cache前,先看看其整个处理过程。 

分享到:
评论

相关推荐

    MyBatis缓存机制深度解剖[收集].pdf

    这个机制包括一级缓存和二级缓存,旨在减少不必要的数据库查询,提高应用程序的响应速度。 一级缓存是基于PerpetualCache的HashMap本地缓存,它的存储范围局限于Session。这意味着在一次Session中,如果相同的查询...

    深入理解MyBatis中的一级缓存与二级缓存

    一级缓存和二级缓存都是MyBatis提供的缓存机制,它们可以帮助提高应用程序的性能。但是,二级缓存的作用范围更大,可以被多个SqlSession共用,是一种更强大的一种缓存机制。 在实际开发中,MyBatis通常和Spring进行...

    MyBatis缓存(一级缓存、二级缓存)

    缓存是MyBatis性能优化的重要手段,分为一级缓存和二级缓存。在这篇文章中,我们将深入探讨这两个级别的缓存机制及其工作原理。 **一级缓存** 一级缓存是SqlSession级别的缓存,也称为局部缓存。当你执行一个查询...

    Mybatis缓存机制案例

    在Mybatis中,缓存分为一级缓存和二级缓存,这两种缓存各有其特点和应用场景。 一级缓存是SqlSession级别的缓存,也称为本地缓存。当我们在一个SqlSession中执行SQL查询后,查询结果会被存储在这个SqlSession中。...

    MyBatis-05 缓存机制

    本篇文章将详细探讨MyBatis的缓存机制,包括一级缓存和二级缓存,以及如何将MyBatis与第三方缓存EhCache进行整合。 首先,我们来了解一级缓存。一级缓存是SqlSession级别的,也称为本地缓存。当我们在一个...

    mybatis二级缓存

    标题中的“mybatis二级缓存”指的是MyBatis框架中的一个重要特性,它是MyBatis缓存机制的一部分,用于提升数据库查询效率。MyBatis一级缓存是SqlSession级别的,而二级缓存则是在整个Mapper配置范围内的全局缓存,...

    mybatis自定义标签.zip

    通过创建处理类、注册标签、编写XML标签并处理逻辑,我们可以轻松地在MyBatis中定制自己的SQL构建机制,从而提高项目的可扩展性和可维护性。在实际项目中,合理利用自定义标签能够极大地提升开发效率,降低维护成本...

    Mybatis-plus基于redis实现二级缓存过程解析

    为了解决这个问题,Mybatis-plus提供了基于Redis的二级缓存机制,能够大幅度提高应用程序的性能。 在Mybatis-plus中,二级缓存是指在应用程序中使用Redis作为缓存层,存储查询结果,以便下次查询时直接从缓存中获取...

    MyBatis3开启二级缓存

    MyBatis的二级缓存实现主要涉及`Cache`接口及其实现类,如`PerpetualCache`,通过源码阅读,可以更深入理解缓存的工作流程,以及如何自定义缓存策略。 通过以上步骤,我们可以成功地在MyBatis3中启用二级缓存,...

    mybatis一级缓存和二级缓存简单示例

    本文将深入讲解 MyBatis 的一级缓存和二级缓存,并通过一个简单的示例进行说明。 ### 一级缓存 一级缓存是 Session 级别的缓存,也称为本地缓存(Local Cache)。每当我们在一个 SqlSession 中执行了 CRUD 操作,...

    springMybatis+redis三级缓存框架

    MyBatis的二级缓存机制允许我们将执行过的SQL查询结果存储在内存中,以供后续相同的查询直接使用,从而避免了重复的数据库访问。二级缓存可以配置在Mapper级别或全局级别,通过XML配置文件或注解进行设置。在实现二...

    基于mybatis自定义缓存配置Redis

    MyBatis提供了两级缓存:一级缓存是SqlSession级别的,存在于SqlSessionFactory内部,而二级缓存是全局的,可以在多个SqlSession之间共享。默认情况下,一级缓存是开启的,但二级缓存需要手动配置。 集成Redis作为...

    mybatis一二级缓存

    在 MyBatis 中,一级缓存和二级缓存是两个重要的性能优化手段,它们可以有效减少对数据库的访问,提高系统的响应速度。下面将详细阐述这两个缓存机制。 ### 一级缓存 一级缓存是 MyBatis 默认开启的本地会话缓存,...

    基于SpringBoot 2.0,SpringMVC,Mybatis,mybatis-plus,motan/dubbo分布式,R

    基于SpringBoot 2.0,SpringMVC,Mybatis,mybatis-plus,motan/dubbo分布式,Redis缓存,Shiro权限管理,redis管理Session,Quartz分布式集群调度,Restful服务;系统管理:包括用户管理、权限管理、数据字典、系统...

    mybatis-generator-config_1_0dtd网址已经链接不了,这里提供源文件

    貌似http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd已经链接不了,这里提供一个mybatis-generator-config_1_0的dtd文件,替换后就可以使用mybatis自动生成插件了。把网址替换成dtd文件的存放路径就行了,...

    mybatis-3.4.6.jar

    同时,MyBatis的缓存机制可以提高查询效率,减少不必要的数据库交互。 总之,MyBatis-3.4.6.jar是MyBatis框架的一个版本,它包含了执行数据库操作所需的核心组件。开发者可以使用这个JAR文件结合XML配置或注解,...

    mybatis+redis缓存配置

    本文重点介绍的是如何结合SpringMVC框架、MyBatis以及Redis实现一个高效的二级缓存机制。 #### 二、Redis作为二级缓存实现 Redis是一个开源的高性能键值存储系统,它具有内存存储、低延迟和丰富的数据结构等特点,...

    mybatis二级缓存学习

    MyBatis二级缓存是MyBatis框架中的一个重要特性,它允许我们在多个SqlSession之间共享数据,从而提高应用性能。本文将深入探讨MyBatis二级缓存的工作原理、配置方式以及如何在实际开发中有效利用。 一、MyBatis二级...

Global site tag (gtag.js) - Google Analytics