MyBatis3.x整理:(五)缓存机制

目录

一、一级缓存

二、二级缓存 

三、EhCache


MyBatis缓存分两级缓存:

一级缓存(也称为本地缓存),默认已开启

二级缓存(也称为查询缓存),需要手动开启和配置,基于其他的缓存框架技术

 

一、一级缓存

在SqlSession中存在一个Map用于缓存查询出来的对象,可以提升性能。MyBatis把执行的方法和参数通过算法生成缓存的Key,将key和查询的结果value存入一个Map对象中。

注:一级缓存提升性能有限,因为SqlSession生命周期太短(和SqlSession相同),真正需要提升性能我们得使用二级缓存

 

二、二级缓存 

 不是所有的对象都适合放到二级缓存。

通常放入二级缓存的情况:

1)经常查询的数据

2)很少被修改的数据

3)不会被并发访问的数据

 

不适合放在二级缓存的情况:

经常被修改的数据

 

二级缓存有一些性能相关的属性:

1)命中率(总的从二级缓存中取得的数量/总的取的数量)

2)最在对象数

3)最大空闲时间

 

1、基本使用

一级缓存是SqlSession级别的,二级缓存是mapper级别的。

二级缓存是多个 SqlSession共享,作用域是mapper的同一个namespace

1)二级缓存默认是开启的

	
	
	

2)Mapper文件中设置二级缓存,使用cache元素


	
	
	

3)存于缓存中的对象必须实现java.io.Serializable接口:

MyBatis3.x整理:(五)缓存机制_第1张图片

 

2.缓存配置细节

1)映射文件中的所有select都会实用查询缓存

2)大多情况下,对于列表查询的select不缓存,因为只有SQL和查询参数完全相同,才会使用查询缓存(设置useCache="false")

3)一般的,只会对get做查询缓存

4)文件中所有的insert、update、delete语句都会刷新缓存,一般针对insert操作不需要刷新缓存(设置flushCache=false")

 

3.常见缓存属性

cache元素的常用属性:blocking,eviction,flushInterval,readOnly,size,type

eviction属性:缓存回收策略

                          [1]LRU 最近最少使用:移除最长时间不被使用的对象(缺省)

                          [2]FIFO 先进选出:按对象进入缓存的顺序来移除它们

                          [3]SOFT 软引用:移除基于垃圾回收器状态和软引用规则的对象

                          [4]WEAK 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象

flushIntverval属性:刷新间隔,单位毫秒,可以设置为任意整数,缺省为没有刷新间隔,缓存仅仅调用语句时刷新

size属性:引用数目,正整数,缺省为1024,代表最多可以缓存多少个对象,太大容易导致内存溢出

realOnly属性:只读,true/false,默认false

                        true:只读缓存;会给所有调用者返回缓存对象的相同实例,因此这些对象不能被修改,这提供了很生要的                                             性能优势

                        false:读写缓存,会返回缓存对象的拷贝(通过序列化),这会慢一些,但安全

 

三、EhCache

 EhCache是一种广泛使用的开源java分布式缓存,具有快速、简单、多种缓存策略、缓存数据内存和硬盘两种级别的特点。缓存数据会在JVM重启的过程中写入硬盘,支持多缓存管理实例以及一个实例的多个缓存区域。

MyBatis中使用EhCache依赖的jar:

ehcache-core-2.6.8.jar

mybatis-ehcache-1.0.3.jar

slf4j-api-1.7.25.jar

slf4j-log4j12-1.7.25.jar

ehcache.xml


    


	
    

	
    

共同的属性配置

        1,maxElementsInMemory:该缓存池放在内存中最大的缓存对象个数;
        2,eternal:是否永久有效,如果设置为true,内存中对象永不过期;
        3,timeToIdleSeconds:缓存对象最大空闲时间,单位:秒;
        4,timeToLiveSeconds:缓存对象最大生存时间,单位:秒;
        5,overflowToDisk:当内存中对象超过最大值,是否临时保存到磁盘;
        6,maxElementsOnDisk:能保存到磁盘上最大对象数量;
        7,diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒
        8,memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。
            默认策略是LRU(最近最少使用),可以设置为FIFO(先进先出)或是LFU(较少使用)

Mapper文件中设置查询缓存选用的缓存技术


	
	
	

 

源码下载

上一篇: MyBatis3.x整理:(四)对象关系映射

下一篇: MyBatis3.x整理:(六)MyBatis Generator​​​​​​​

 

你可能感兴趣的:(java,其他)