本文是自己的学习笔记,主要参考以下资料
- 马士兵教育
1、缓存概念
缓存是针对一些大量的重复查询,将查询结果存到内存中,减少数据库的负担。
Mybatis的缓存有三个级别。
类别 | 说明 |
---|---|
一级缓存 | 事务范围:缓存只能被当前事务访问。缓存的生命周期依赖于事务的生命周期当事务结束时,缓存也就结束生命周期。 在此范围下,缓存的介质是内存。 |
二级缓存 | 进程范围:缓存被进程内的所有事务共享。这些事务有可能是并发访问缓存,因此必须对缓存采取必要的事务隔离机制。 缓存的生命周期依赖于进程的生命周期,进程结束时, 缓存也就结束了生命周期。进程范围的缓存可能会存放大量的数据, 所以存放的介质可以是内存或硬盘。 |
三级缓存 | 集群范围:在集群环境中,缓存被一个机器或者多个机器的进程共享。 缓存中的数据被复制到集群环境中的每个进程节点, 进程间通过远程通信来保证缓存中的数据的一致性, 缓存中的数据通常采用对象的松散数据形式 |
一级缓存的作用不大,因为缓存数据仅存在于一次会话中,相当于一个方法。实际开发中我们查询的数据在一个方法中通过变量随时可以拿到,所以一级缓存的意义不大。
二级缓存是最常用的,还需要搭配redis
或者encache
来实现二级缓存。
2、二级缓存Encache集成
2.1、导入依赖
这里我们用encache
实现二级缓存,所以先导入依赖。
xml
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>1.5.0</version>
</dependency>
<dependency>
<groupId>org.mybatis.caches</groupId>
<artifactId>mybatis-ehcache</artifactId>
<version>1.1.0</version>
</dependency>
2.2、
在对应的mapper.xml
增加一个配置。表明该mapper的查询结果都将进入缓存中,并且指明缓存的类型。
xml
<mapper namespace="com.bobo.dao.EmpMapper">
<cache type="org.mybatis.caches.ehcache.EhcacheCache" />
...
</mapper>
每次调用这个mapper里的查询时,都会优先在缓存中查找数据。