【MyBatis】集成EhCache/Redis缓存

集成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等。

猜你喜欢

转载自blog.csdn.net/gnd15732625435/article/details/81240279