集成EhCache缓存
EhCache是一个纯粹的Java进程内的缓存框架,特性如下:
- 快速
- 简单
- 多种缓存策略
- 缓存数据有内存和磁盘两级,无需担心容量问题
- 缓存数据会在虚拟机重启的过程中写入磁盘
- 可以通过RMI、可插入API等方式进行分布式缓存
- 具有缓存和缓存管理器的侦听接口
- 支持多缓存管理器实例以及一个实例的多个缓存区域
添加依赖
<dependency>
<groupId>org.mybatis.caches</groupId>
<artifactId>mybatis-ehcache</artifactId>
<version>1.1.0</version>
</dependency>
配置EhCache
在src/main/resources目录下新增ehcache.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
updateCheck="false" monitoring="autodetect"
dynamicConfig="true">
<diskStore path="D:/cache"/>
<defaultCache
maxElementsInMemory="1000"
eternal="false"
copyOnRead="true"
copyOnWrite="true"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600"
overflowToDisk="true"
diskPersistent="true"/>
</ehcache>
修改TUserMapper.xml
<mapper namespace="cn.jujianfei.demo.dao.TUserMapper">
<cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>
.....
</mapper>
只通过设置type属性就可以使用EhCache缓存了,这时cache的其他属性都不会起到任何作用,针对缓存的配置都在ehcache.xml中进行。在ehcache.xml配置文件中,只有一个默认的缓存配置,所以配置使用EhCache缓存的Mapper映射文件都会有一个以映射文件命名空间命名的缓存。如果想针对某一个命名空间进行配置,需要在ehcache.xml中添加一个和映射文件命名空间一致的缓存配置,例如针对TUserMapper,可以进行如下配置:
<cache name="cn.jujianfei.demo.dao.TUserMapper"
maxElementsInMemory="3000"
.....
/>
集成Redis缓存
Redis是一个高性能的key-value数据库。
添加依赖
<dependency>
<groupId>org.mybatis.caches</groupId>
<artifactId>mybatis-redis</artifactId>
<version>1.0.0-beta2</version>
</dependency>
mybatis-redis目前只有beta版本。
配置Redis
使用Redis前,必须有一个Redis服务。Redis服务启动后,在src/main/resources目录下新增redis.properties文件。
host=localhost
port=6379
connectionTimeout=5000
soTimeout=5000
password=
database=0
clientName=
修改TUserMapper.xml中的缓存配置
<mapper namespace="cn.jujianfei.demo.dao.TUserMapper">
<cache type="org.mybatis.caches.redis.RedisCache"></cache>
.....
</mapper>
配置依然很简单,RedisCache在保存缓存数据和获取缓存数据时,使用了Java的序列化和反序列化,因此还需要保证被缓存的对象必须实现Serializable接口。
结语
当需要分布式部署应用时,如果使用MyBatis自带缓存或基础的EhCache缓存,分布式应用会各自拥有自己的缓存,它们之间不会共享缓存,这种方式会消耗更多的服务器资源。如果使用类似Redis的缓存服务,就可以将分布式应用连接到同一个缓存服务器,实现分布式应用间的缓存共享。
除了EhCache和Redis,MyBatis官方还提供了与其他缓存框架或服务器集成的实现类,如Memcached等。