`
derek_z
  • 浏览: 16749 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Mybatis 二级缓存

 
阅读更多

 

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

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

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

映射文件中添加一行:  

<cache /> 

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

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

 映射文件中所有的insert、update和delete语句将刷新缓存  缓存将使用LRU(Least Recently Used)最近最少使用策略算法来回

收 

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

序来刷新 

 缓存会存储列表集合和对象(无论查询方法返回什么)的1024个引用  缓存会被视为read/write(可读/可写)的缓存,意味着对象检索不是共

享的,而且可以安全的被调用者修改,而不干扰其他调用者或者线程所做的潜在修改 

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

 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。 

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

 

------------------------------------------------------------------------

一、MyBatis的Cache配置
1、全局开关:默认是true,如果它配成false,其余各个Mapper XML文件配成支持cache也没用。
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>

2、各个Mapper XML文件,默认是不采用cache。在配置文件加一行就可以支持cache:
 <cache />

3、Mapper XML文件配置支持cache后,文件中所有的Mapper statement就支持了。此时要个别对待某条,需要:
<select id="inetAton" parameterType="string" resultType="integer" useCache=“false” 
select inet_aton(#{name})
</select>

二、注意的几个细节
1、如果readOnly为false,此时要结果集对象是可序列化的。
<cache readOnly="false"/>

2、在SqlSession未关闭之前,如果对于同样条件进行重复查询,此时采用的是local session cache,而不是上面说的这些cache。

3、MyBatis缓存查询到的结果集对象,而非结果集数据,是将映射的PO对象集合缓存起来。

分享到:
评论

相关推荐

    mybatis二级缓存学习

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

    mybatis二级缓存

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

    从0到1项目搭建-集成 Redis 配置MyBatis二级缓存

    基于 SpringBoot 从0搭建一个企业级开发项目,基于SpringBoot 的项目,并集成MyBatis-Plus、Redis、Druid、Logback ,并使用 Redis 配置 MyBatis 二级缓存。

    mybatis二级缓存扩展-与redis集成

    在大型系统中,为了提高数据访问效率,MyBatis提供了二级缓存机制。本文将深入探讨如何对MyBatis的二级缓存进行扩展,并将其与Redis集成,以充分利用分布式缓存的优势。 MyBatis的二级缓存是基于全局的,它允许不同...

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

    "深入理解MyBatis中的一级缓存与二级缓存" MyBatis是一种流行的持久层框架,它提供了缓存机制来提高应用程序的性能。在MyBatis中,有两种类型的缓存:一级缓存和二级缓存。下面我们将深入了解MyBatis中的一级缓存和...

    深入了解MyBatis二级缓存

    "深入了解MyBatis二级缓存" MyBatis是一种流行的Java持久层框架,它提供了强大的缓存机制以提高应用程序的性能。其中,二级缓存是MyBatis中的一种高级缓存机制,它可以将查询结果缓存在内存中,以便下次查询时直接...

    MyBatis 二级缓存 关联刷新实现

    MyBatis 二级缓存 关联刷新实现1、MyBatis缓存介绍2、二级缓存问题2.1、数据不一致问题验证2.2、问题处理思路3、关联缓存刷新实现 1、MyBatis缓存介绍  Mybatis提供对缓存的支持,但是在没有配置的默认情况下,它只...

    apache ignite实现mybatis二级缓存所需要的jar包

    Apache Ignite是一款开源的...以上就是使用Apache Ignite实现MyBatis二级缓存的基本知识点,希望对你有所帮助。在实际开发中,还可能涉及到其他细节,如错误处理、日志配置等,需要根据具体需求进行深入学习和实践。

    基于Java的Mybatis二级缓存memcache设计源码

    Mybatis二级缓存memcache项目源码,共20个文件,全部采用Java语言编写,涉及多种文件类型如Java源代码、XML配置文件、PREFS文件、CLASSPATH文件、Git忽略文件、PROJECT文件、LICENSE文件、NOTICE文件、README文件和...

    mybatis二级缓存的实现代码

    MyBatis二级缓存的实现代码 MyBatis是当前Java领域中最流行的持久层框架之一,将SQL映射到Java对象的技术称为ORM(Object-Relational Mapping)。MyBatis提供了三级缓存机制,一级缓存是Session级别的缓存,二级...

    深入了解MyBatis二级缓存共6页.pdf.zip

    其中,二级缓存是MyBatis优化数据库操作的重要特性之一。本文将深入探讨MyBatis的二级缓存机制,旨在帮助开发者更好地理解和利用这一功能。 首先,我们需要了解什么是缓存。缓存是一种存储技术,用于暂时保存经常...

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

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

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

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

    Mybatis的以及缓存和二级缓存(案例).mhtml

    此文章是对Mybatis框架的一级缓存一级二级缓存的描述,包括他们的作用,案例,以及部分源码分析,对一级缓存以及二级缓存进行了详细的描述以及概括,还有如何使用等内容

    springMybatis+redis三级缓存框架

    "springMybatis+redis三级缓存框架"是一个高效且灵活的解决方案,它将MyBatis的二级缓存与Redis相结合,形成一个三级缓存体系,以优化数据读取速度并减轻数据库压力。 首先,MyBatis作为一款轻量级的持久层框架,其...

    详解Spring boot使用Redis集群替换mybatis二级缓存

    Spring Boot 使用 Redis 集群替换 MyBatis 二级缓存 Spring Boot 作为当前流行的 Java Web 框架,提供了许多便捷的功能来快速开发 Web 应用程序。其中,缓存机制是 Spring Boot 中一个非常重要的组件,缓存机制...

    MyBatis二级缓存Cache Hit Ratio始终等于0

    在MyBatis中,二级缓存是用于存储多个SqlSession之间共享的数据,旨在提高系统性能,减少对数据库的访问次数。然而,当遇到"二级缓存Cache Hit Ratio始终等于0"的问题时,意味着缓存没有起到预期的效果,每次查询都...

    47-二级缓存 Hibernate-Shiro-MyBatis

    **MyBatis二级缓存** MyBatis是一个轻量级的SQL映射框架,它的二级缓存功能允许结果集在多会话间共享,减少了数据库交互。MyBatis的二级缓存配置包括: 1. 在mybatis-config.xml中开启二级缓存,并指定缓存实现...

    mybatis一二级缓存

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

Global site tag (gtag.js) - Google Analytics