Mybatis 缓存

简介: 简介一般来说,应用处理请求的速度取决于CPU与应用内存。为了加速我们的应用,我们一般会采取如下措施:改善应用的算法性能多台机器,多个CPU进行并行计算升级CPU等在应用中,我们需要减少对数据库的访问次数,因为获取数据需要花费时间,如果用能临时的储存获取的数据,供下次再次利用,那对我们将有一些帮助。

简介

一般来说,应用处理请求的速度取决于CPU与应用内存。为了加速我们的应用,我们一般会采取如下措施:

  • 改善应用的算法性能
  • 多台机器,多个CPU进行并行计算
  • 升级CPU等

在应用中,我们需要减少对数据库的访问次数,因为获取数据需要花费时间,如果用能临时的储存获取的数据,供下次再次利用,那对我们将有一些帮助。缓存可以帮我们减少这些负载。

我们主要介绍Mybatis的缓存机制,与Mybatis和Encache的结合。

概念

  • Mybatis的一级缓存:指SqlSession。一级缓存的作用域是一个SqlSession。Mybatis默认开启一级缓存。在同一个SqlSession中,执行相同的查询SQL,第一次会去查询数据库,并写到缓存中;第二次直接从缓存中取。当执行SQL时两次查询中间发生了增删改操作,则SqlSession的缓存清空。

  • Mybatis的二级缓存:指mapper映射文件。二级缓存的作用域是同一个namespace下的mapper映射文件内容,多个SqlSession共享。Mybatis需要手动设置启动二级缓存。在同一个namespace下的mapper文件中,执行相同的查询SQL,第一次会去查询数据库,并写到缓存中;第二次直接从缓存中取。当执行SQL时两次查询中间发生了增删改操作,则二级缓存清空。

Mybatis缓存的一些配置

  1. 主配置文件中,CacheEnabled 关闭二级缓存,一级缓存仍然可以使用
  2. Mapper.xml文件中,<Select useCache=true>,一级缓存仍然可以使用,关闭的是二级缓存
  3. Mapper.xml文件中,FlushCache,都是默认为true,增删改执行完成之后就会清楚缓存。如果查询也设置这个属性,那么缓存就不会使用
  4. 程序运行中,sqlSession.clearCache() 清楚第一级缓存
  5. 主配置文件中,localCacheScope: 本地缓存作用域(一级缓存),Session,Statement,Global

Mybatis与ehcache结合

Ehcache是一个广泛使用缓存容器。详情请参考官方文档。Mybatis与Encache的集成,只依赖Encache-core包。想用Encache的更多功能,我们引入整个包。
pom.xml文件

        <dependency>
            <groupId>org.mybatis.caches</groupId>
            <artifactId>mybatis-ehcache</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
            <version>2.10.3</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.24</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.10</version>
        </dependency>

然后在Mapper.xml文件中

mapper namespace="org.acme.FooMapper">
  <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
  ...
</mapper>

也可以动态的修改参数

mapper namespace="org.acme.FooMapper">
  <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    <property name="timeToIdleSeconds" value="3600"/><!--1 hour-->
    <property name="timeToLiveSeconds" value="3600"/><!--1 hour-->
    <property name="maxEntriesLocalHeap" value="1000"/>
    <property name="maxEntriesLocalDisk" value="10000000"/>
    <property name="memoryStoreEvictionPolicy" value="LRU"/>
  </cache>
  ...
</mapper>

一般我们还要再资源目录下配置一个ehcache.xml文件,ehcache.xml文件的详细配置请参考ehcache的官方文档。

参考

目录
相关文章
|
3月前
|
缓存 Java 数据库连接
MyBatis的缓存
MyBatis的缓存
|
7天前
|
XML 缓存 Java
MyBatis二级缓存解密:深入探究缓存机制与应用场景
MyBatis二级缓存解密:深入探究缓存机制与应用场景
39 2
MyBatis二级缓存解密:深入探究缓存机制与应用场景
|
1月前
|
存储 缓存 Java
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
|
1月前
|
缓存 Java 数据库连接
mybatis 数据库缓存的原理
MyBatis 是一个流行的 Java 持久层框架,它封装了 JDBC,使数据库交互变得更简单、直观。MyBatis 支持两级缓存:一级缓存(Local Cache)和二级缓存(Global Cache),通过这两级缓存可以有效地减少数据库的访问次数,提高应用性能。
282 1
|
1月前
|
存储 缓存 Java
【MyBaits】4、延迟加载、MyBatis 的缓存
【MyBaits】4、延迟加载、MyBatis 的缓存
22 0
|
2月前
|
SQL 缓存 Java
mybatis缓存详解
mybatis缓存详解
22 0
|
3月前
|
缓存 Java 数据库连接
mybatis的缓存内容(下)
mybatis的缓存内容
28 0
|
3月前
|
SQL 缓存 Java
mybatis的缓存内容(上)
mybatis的缓存内容
31 0
|
3月前
|
缓存 Java 数据库连接
|
3月前
|
缓存 Java 数据库连接
MyBatis支持的缓存刷新模式
MyBatis支持的缓存刷新模式
217 1