Mybatis入门系列之(十五)——mybatis集成ehcache

集成ehcache

Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。

主要的特性有:

快速

简单

多种缓存策略

缓存数据有两级:内存和磁盘,因此无需担心容量问题

缓存数据会在虚拟机重启的过程中写入磁盘

可以通过RMI、可插入API等方式进行分布式缓存

具有缓存和缓存管理器的侦听接口

支持多缓存管理器实例,以及一个实例的多个缓存区域

如何集成?
  • 添加maven依赖:
<!-- https://mvnrepository.com/artifact/org.mybatis.caches/mybatis-ehcache -->
<dependency>
    <groupId>org.mybatis.caches</groupId>
    <artifactId>mybatis-ehcache</artifactId>
    <version>1.0.3</version>
</dependency>

<!-- https://mvnrepository.com/artifact/net.sf.ehcache/ehcache -->
<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache</artifactId>
    <version>2.10.4</version>
</dependency>
  • 再src/main/resources下面配置配置ehcache.xml文件:

    <?xml version="1.0" encoding="UTF-8" ?>
    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:noNamespaceSchemaLocation="ehcache.xsd"
           updateCheck="false">
    
      <!--
          xsd约束请参考: http://ehcache.org/ehcache.xsd
          更多配置参考: http://www.ehcache.org/ehcache.xml
    
        copyOnRead的含义是:判断从缓存中读取数据时时返回对象的引用还是复制一个对象返回。
          默认情况下是false,即返回数据的引用,这种情况下发怒hi的都是相同的对象,和MyBatis
          默认缓存中的只读对象是相同的。如果设置为true,那就是可读写缓存,每次读取缓存时都会
          复制一个新的实例。
    
           copyOnWrite的含义是:判断写入缓存时时直接缓存对象的引用还是复制一个对象后缓存,
           默认也是false。如果想使用可读写缓存,就需要将这两个属性配置为true,如果使用只读
           缓存,可以不配置这两个属性,使用默认值false即可。
      -->
    
      <diskStore path="D:/cache"/>
      <defaultCache
              maxElementsInMemory="3000"
              eternal="false"
              copyOnRead="true"
              timeToIdleSeconds="3600"
              timeToLiveSeconds="3600"
              overflowToDisk="true"/>
    </ehcache>

  • 修改RoleMapper.xml中的缓存配置

      <!--
          ehcache提供了两个缓存的实现类
              org.mybatis.caches.ehcache.EhcacheCache
              org.mybatis.caches.ehcache.LoggingEhcache
           这两个缓存,第二个时带日志的缓存,由于MyBatis初始化缓存时,如果Cache不是继承
           自LoggingEhcache,MyBatis便会使用LoggingEhcache装饰代理缓存,所以上面两个
           缓存使用时并没有区别,都会输出缓存命中率的日志。
    
           这里通过设置type属性就可以使用ehcache了。
      -->
      <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

二级缓存使用场景

二级缓存虽然好处很多,但并不是什么时候都可以使用 。 在以下场景中,推荐使用二级缓存。

  • 以查询为主的应用中,只有尽可能少的增、删、改操作 。

  • 绝大多数以单表操作存在时,由于很少存在互相关联的情况,因此不会出现脏数据 。

  • 可以按业务划分对表进行分组时 , 如关联的表比较少,可以通过参照缓存进行配置。

除了推荐使用的情况,如果脏读对系统没有影响,也可以考虑使用 。 在无法保证数据不出
现脏读的情况下 , 建议在业务层使用可控制的缓存代替 二级缓存 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值