mybatis_15整合ehcache

 

3.4 整合ehcache

Mybatis自己是一个持久层框架,它不是专门的缓存框架,因此它对缓存的实现不够好,不能支持分布式。缓存

 

Ehcache是一个分布式的缓存框架。mybatis

 

什么是分布式

系统为了提升性能,一般会对系统采用分布式部署(集群部署方式)app

 

  

整合思路

Cache是一个接口,它的默认实现是mybatis的PerpetualCache。若是想整合mybatis的二级缓存,那么实现Cache接口便可。框架


 

  

添加jar包

 

 

 

设置映射文件中cache标签

的type值为ehcache的实现类jvm

 


在src下添加ehcache的配置文件
 分布式

 

 

  • maxElementsInMemory :设置基于内存的缓存中可存放的对象最大数目
  • eternal:设置对象是否为永久的,true表示永不过时,此时将忽略
  • timeToIdleSeconds 和 timeToLiveSeconds属性; 默认值是false
  • timeToIdleSeconds:设置对象空闲最长时间,以秒为单位, 超过这个时间,对象过时。当对象过时时,EHCache会把它从缓存中清除。若是此值为0,表示对象能够无限期地处于空闲状态。
  • timeToLiveSeconds:设置对象生存最长时间,超过这个时间,对象过时。若是此值为0,表示对象能够无限期地存在于缓存中. 该属性值必须大于或等于 timeToIdleSeconds 属性值
  • overflowToDisk:设置基于内在的缓存中的对象数目达到上限后,是否把溢出的对象写到基于硬盘的缓存中
  • diskPersistent 当jvm结束时是否持久化对象 true false 默认是false
  • diskExpiryThreadIntervalSeconds 指定专门用于清除过时对象的监听线程的轮询时间

memoryStoreEvictionPolicy - 当内存缓存达到最大,有新的element加入的时候, 移除缓存中element的策略。性能

 

flashInterval:设置刷新时间(清空缓存)测试

默认是LRU(最近最少使用),可选的有LFU(最不常使用)和FIFO(先进先出)spa

 

测试:用上一篇文章中二级缓存例子便可

 

二级缓存应用场景

使用场景:对于访问响应速度要求高,可是实时性不高的查询,能够采用二级缓存技术线程

注意:在使用二级缓存的时候,要设置一下刷新间隔(cache标签中有一个flashInterval属性)来定时刷新二级缓存,这个刷新间隔根据具体需求来设置,好比设置30分钟、60分钟等,单位为毫秒。

局限性

Mybatis二级缓存对细粒度的数据,缓存实现很差。

场景:

对商品信息进行缓存,因为商品信息查询访问量大,可是要求用户每次查询都是最新的商品信息,此时若是使用二级缓存,就没法实现当一个商品发生变化只刷新该商品的缓存信息而不刷新其余商品缓存信息,由于二级缓存是mapper级别的,当一个商品的信息发送更新,全部的商品信息缓存数据都会清空。

解决此类问题,须要在业务层根据须要对数据有针对性的缓存。

 

好比能够对常常变化的 数据操做单独放到另外一个namespace的mapper中。

相关文章
相关标签/搜索