mybatis的二级缓存

本文详细介绍了Mybatis的二级缓存,包括一级缓存的短暂性、二级缓存的手动开启及其作用域,以及二级缓存的运行规则。讨论了如何在mapper配置中启用二级缓存,写操作对缓存的影响,以及如何通过配置控制缓存行为。同时,提到了Goods类和MybatisUtils工具类在实现过程中的角色。
摘要由CSDN通过智能技术生成

一:mybatis的二级缓存介绍

1、一级缓存默认开启,缓存范围SqlSession会话,存储时间是非常端的使用率不高。

2、二级缓存手动开启,缓存属于范围Mapper Namespace

3、两个缓存的范围图解

 

二:二级缓存的运行规则和开启

1、二级缓存开启后默认所有查询操作均使用缓存

  在mapper/goods.xml中开启:

<!--开启二级缓存-->
<cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>

eviction是缓存的清除策略,当缓存对象数量达到上限后,自动触发对应算法对缓存对象清除
    1.LRU - 最近最久未使用:移除最长时间不被使用的对象【保证命中率,最常使用】
        对象数量:    O1  O2  O3 O4 .... O512
        访问间隔时间:14  88  63  1      666
    2.FIFO - 先进先出:按对象进入缓存的顺序来移除它们【无法保证命中率】
    3.SOFT - 软引用:移除基于垃圾收集器状态和软引用规则的对象
    4.WEAK - 弱引用:更积极的移除基于垃圾收集器状态和弱引用规则的对象。

flushInterval:代表间隔多长时间自动清空缓存,单位毫秒,600000毫秒=10分钟
size:缓存存储上限,用于保存对象或集合(1个集合算1个对象)的数量上限
readOnly:设置为true,代表返回只读缓存,每次从缓存取出的是缓存对象本身,这种执行效率较高
设置为false,代表每次取出的缓存对象的 "副本",每次取出的对象都是不同的,这种安全性较高

2、(一级和二级缓存)写操作commit提交时对该namespace缓存强制清空。测试用例:

    /**
     * 测试一级缓存
     */
    @Test
    public void testLv1Cache() throws Exception{
        SqlSession sqlSession = null;
        try{
            sqlSession = MybatisUtils.openSession();
            //执行两次,控制台只打印一次sql语句
            Goods goods = sqlSession.selectOne("goods.selectById", 24);
            Goods goods2 = sqlSession.selectOne("goods.selectById", 24);
            //同一个SqlSession会话,指向同一个缓存区域
            System.out.println(goods.hashCode()+"--"+goods2.hashCode());
        }catch (Exception e){
            throw e;
        }finally {
            MybatisUtils.closeSession(sqlSession);
        }

        try{
            sqlSession = MybatisUtils.openSession();
            //执行两次,控制台只打印一次sql语句
            Goods goods = sqlSession.selectOne("goods.selectById", 24);
            sqlSession.commit();//commit会把当前的namespace缓存强制清空
            Goods goods2 = sqlSession.selectOne("goods.selectById", 24);
            //同一个SqlSession会话,指向同一个缓存区域
            System.out.println(goods.hashCode()+"--"+goods2.hashCode());
        }catch 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值