• mabatis--查询缓存


    1、mybatis提供查询缓存,用于减轻数据库压力,提高数据库性能。

    2、mybatis提供一级缓存、二级缓存;

    3、一级缓存是SqlSession级别的缓存。在SqlSession对象中,存在一个数据结构(HashMap)用于存储缓存数据。不同SqlSession之间的缓存数据区域是互不影响的;

    --在执行查询操作之前,将先查询缓存区域中是否存在相应的数据,若不存在,则向数据库发出请求查询数据;若缓存中已存在要查询的数据,则直接返回数据,无需向数据库发起请求;

    --若在两次查询中间,对数据库执行了commit (insert, delete, update)操作,mybatis将清空SqlSession的缓存区域,避免读取脏数据;

    --mybatis默认支持一级缓存,无需在配置文件中配置;

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

    --开启二级缓存

      1)配置文件中开启

    <!-- 开启二级缓存,默认值为true -->
    <setting name="cacheEnabled" value="true"/>

      2)在mapper中开启

    <!-- 开启 mapper 的 namespace 下的二级缓存 -->
    <cache/>

    --二级缓存区域是按照命名空间(namespace)划分的;

    --若有一个SqlSession对象执行了commit(insert, delete, update)操作,将清空二级缓存区域;

    --需要将pojo类实现序列化接口,为了将缓存数据取出执行反序列化操作,因为二级缓存数据存储介质有多种,不一定在内存中;

    --可以在<select>等中设置 useCache="false" 禁用二级缓存,默认为true;

    --在mapper的同一个namespace中,如果有其他insert,updatem,delete操作数据后需要刷新缓存,如果不执行则会出现脏读。可以在<insert>中设置flushCache="true"开启;

    --二级缓存引用场景:查询结果实时性要求不高时、采用耗时较高的sql时;

    --可以设置刷新间隔时间,由mybatis每隔一段时间自动清空缓存,根据数据变化频率设置缓存刷新间隔(flushInterval);

    5、二级缓存局限性:mybatis二级缓存对细粒度的数据级别的缓存实现不好。

  • 相关阅读:
    ActiveMQ介绍及安装
    Spring注解驱动开发
    Redis 安装、配置、集群
    FastDFS的使用
    How are you vs How are you doing
    阅微草堂笔记
    我在实习的英文表达
    INTRO: THE DAWN (亡灵序曲) 中独白
    银魂的武士道
    Linguistic Data Consortium (LDC)
  • 原文地址:https://www.cnblogs.com/tengtao93/p/5112271.html
Copyright © 2020-2023  润新知