【MyBatis】——mybatis缓存以及整合ehcache

原创 2016年06月14日 14:38:56

            首先向介绍一下mybatis的缓存以及为什么使用缓存。


MyBatis缓存介绍

            hibernate等其他持久层框架一样,mybatis同样提供了一级缓存和二级缓存的支持,用于减轻数据压力,提高数据库性能。


            一级缓存时SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。

 

            二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。


为什么要用缓存?

            如果缓存中有数据就不用从数据库中获取,大大提高系统性能。

 

一、整合原因

        首先ehcache是一个分布式缓存框架。当缓存的数据在各个服务单独存储,这样就不方便系统开发,系统为了提高系统并发,性能,所以要使用分布式缓存对缓存数据进行集中管理。而mybatis无法实现分布式缓存,需要和其他分布式缓存框架进行整合。


二、整合原理

mybatis提供二级缓存Cache接口,如下:

            

它的默认实现类:

            

            通过实现Cahce接口可以实现mybatis缓存数据通过其它缓存数据库整合,mybatis的特长是sql操作,缓存数据的管理不是myabatis的特长,为了提高缓存的性能将mybatis和第三发的缓存数据库整合。

 

三、整合方法

1、引入缓存需要的jar

            

2、引入缓存配置文件

            classpath下配置ehcache.xml

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
	<diskStore path="F:\develop\ehcache" />
	<defaultCache 
		maxElementsInMemory="1000" 
		maxElementsOnDisk="10000000"
		eternal="false" 
		overflowToDisk="false" 
		timeToIdleSeconds="120"
		timeToLiveSeconds="120" 
		diskExpiryThreadIntervalSeconds="120"
		memoryStoreEvictionPolicy="LRU">
	</defaultCache>
</ehcache>

3、开启ehcache缓存

            配置mapper中的cache中的typeehcachecache接口的实现类型

            修改mapper.xml文件,在cache中指定EhcacheCache

<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

四、应用场景

            对于访问多的查询请求且用户对查询结果实时性要求不高,此时可采用mybatis二级缓存技术降低数据库访问量,提高访问速度,业务场景比如:耗时较高的统计分析sql、电话账单查询sql等。

            实现方法如下:通过设置刷新间隔时间,由mybatis每隔一段时间自动清空缓存,根据数据变化频率设置缓存刷新间隔flushInterval,比如设置为30分钟、60分钟、24小时等,根据需求而定。

 

五、局限性

            mybatis二级缓存对细粒度的数据级别的缓存实现不好,比如如下需求:对商品信息进行缓存,由于商品信息查询访问量大,但是要求用户每次都能查询最新的商品信息,此时如果使用mybatis的二级缓存就无法实现当一个商品变化时只刷新该商品的缓存信息而不刷新其它商品的信息,因为mybaits的二级缓存区域以mapper为单位划分,当一个商品信息变化会将所有商品信息的缓存数据全部清空。解决此类问题需要在业务层根据需求对数据有针对性缓存。



版权声明:本文为博主原创文章,未经博主允许不得转载。

Mybatis学习(十四)mybatis框架下整合分布式缓存ehcache

分布式缓存 不使用分布缓存,缓存的数据在各各服务单独存储,不方便系统 开发。所以要使用分布式缓存对缓存数据进行集中管理。 分布式缓存工作图 mybatis本身来说是无法实现分布式缓存的,所以要与分...
  • sun_aichao
  • sun_aichao
  • 2015年06月11日 15:16
  • 7478

#MyBatis中使用Ehcache缓存框架

MyBatis简介 Ehcache简介 使用Ehcache的目的 MyBatis中使用Ehcache jar包 ecache配置文件文件名必须为ehcachexml 在mybatis的mapper中启...
  • YEN_CSDN
  • YEN_CSDN
  • 2017年01月13日 15:33
  • 2098

Redis入门很简单之九【SpringMvc+Mybatis与redis整合让Mybatis管理缓存】

Redis入门很简单之九【SpringMvc+Mybatis与redis整合让Mybatis管理缓存】
  • it_zhaonan
  • it_zhaonan
  • 2016年03月17日 15:17
  • 5261

Mybatis入门实例(二)——添加ehcache缓存支持

接上回: Mybatis入门实例(一),地址http://qiuqiu0034.iteye.com/blog/1157768  本帖用的数据库和上面帖子中的数据库相同   为了提高M...
  • xj626852095
  • xj626852095
  • 2015年04月01日 01:16
  • 399

Mybatis入门实例(二)——添加ehcache缓存支持

为了提高MyBatis的性能,有时候我们需要加入缓存支持,目前用的比较多的缓存莫过于ehcache缓存了,ehcache性能强大,而且位各种应用都提供了解决方案,在此我们主要是做查询缓存,提高查询的效...
  • ILOVESMJ
  • ILOVESMJ
  • 2016年06月08日 14:47
  • 4395

mybatis中整合ehcache缓存框架的使用

mybatis整合ehcache缓存框架的使用   mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中...
  • sotong006
  • sotong006
  • 2017年12月22日 10:20
  • 40

mybatis整合ehcache分布式二级缓存框架的使用

mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓存。 1.开启mybatis的二级缓存   ...
  • KevinwuwenboA
  • KevinwuwenboA
  • 2017年03月05日 14:05
  • 322

mybatis详解-(22)整合第三方缓存Ehcache

前面几篇文章剖析了mybatis的缓存原理,发现mybatis提供的缓存是非常简陋的,用HashMap进行存储。 有专业做缓存的,那么就使用专业的缓存框架吧,这里使用Ehcache来作为mybati...
  • jinjin603
  • jinjin603
  • 2017年12月21日 17:42
  • 39

Mybatis(3、延迟加载、查询缓存、与ehcache整合、逆向工程、与spring整合)

延迟加载 延迟加载:先从单表查询、需要时再从关联表去关联查询,大大提高 数据库性能,因为查询单表要比关联查询多张表速度要快。 使用association实现延迟加载 需要先定义连个mapper的方法...
  • www1056481167
  • www1056481167
  • 2017年04月24日 16:03
  • 144

mybatis一二级缓存详解,整合ehcache缓存,

mybatis和hibernate一样都是优秀的orm框架,但是两者的定位不同,所以有所差异,这里我们就从缓存的角度来介绍一下mybatis: 大家都知道使用mybatis就要先获取sqlsessio...
  • do_bset_yourself
  • do_bset_yourself
  • 2016年04月28日 15:59
  • 4598
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【MyBatis】——mybatis缓存以及整合ehcache
举报原因:
原因补充:

(最多只允许输入30个字)