Mysql二级缓存

在全局配置文件中配置

//开启全局二级缓存
<setting name="cacheEnabled" value="true"/>

在映射文件中

<cache eviction="" flushInterval=" " readOnly=""></cache>
参数解释:

eviction=“FIFO”:缓存回收策略:
•LRU –最近最少使用的:移除最长时间不被使用的对象。
•FIFO –先进先出:按对象进入缓存的顺序来移除它们。
•SOFT –软引用:移除基于垃圾回收器状态和软引用规则的对象。
•WEAK –弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
•默认的是LRU。

•flushInterval:刷新间隔,单位毫秒
•默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新

•size:引用数目,正整数
•代表缓存最多可以存储多少个对象,太大容易导致内存溢出

•readOnly:只读,true/false
•true:只读缓存;会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。
•false(默认):读写缓存;会返回缓存对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认是false。

POJO需要实现序列化接口

public class Employee implements Serializable {

	private static final long serialVersionUID =1L;
	...
	}

测试

第二次缓存实在cache中拿到的数据,并没有发送新的sql,前提是查的都一样,前提是上一次的session关闭了,二级缓存中才会有数据
public void testSecondCache() throws IOException {

		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		SqlSession openSession = sqlSessionFactory.openSession();
		SqlSession openSession1 = sqlSessionFactory.openSession();
		try{
			EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
			EmployeeMapper mapper1 = openSession1.getMapper(EmployeeMapper.class);

			Employee emp01 = mapper.getEmpById(1);
			System.out.println(emp01);
			openSession.close();
			
			Employee emp02 = mapper1.getEmpById(1);
			System.out.println(emp02);
			openSession1.close();


		}finally {

		}

	}

相关参数

  •   1.cacheEnabled=false,关闭二级缓存,一级缓存还存在
    
  •   2.每个selece中useCache="true"
    
  •   			false:不使用缓存(一级缓存依然能够使用,二级不适用)
    
  •   3./*重点掌握*/  每个增删改标签 flushCache="true",一级二级缓存都会被清空
    
  •   4.查询标签默认flushCache="true",如果改为false,每次查询之后缓存被清空
    
  •   5.sqlSession.clearCache清除当前session的一级缓存
    
  •   6.localCacheScope:本地缓存作用域
    
  •   	一级缓存SESSION,当前会话的所有数据保存在会话缓存中
    
  •   	STATEMENT:可以禁用一级缓存
    

第三方缓存整合

1.导入第三方缓存包,和ehcache.xml
2.在EmployeeMapper.xml中引用
<cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>
3.想要在其他映射文件中(DepartmentMapper.xml)使用和上述相同的引用<cache-ref namespace="com.atguigu.mybatis.dao.EmployeeMapper"/>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值