zoukankan      html  css  js  c++  java
  • 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二级缓存对细粒度的数据级别的缓存实现不好。

  • 相关阅读:
    MongoDB中级---->关联多表查询
    Java爬虫,信息抓取的实现
    Android Java汉字转拼音总结
    Android使用Activity用作弹出式对话框
    利用Theme自定义Activity间的切换动画
    ListView滑动删除 ,仿腾讯QQ
    CentOS 6.2+Nginx+Nagios,手机短信和qq邮箱提醒
    玩转Web之easyui(三)-----easy ui dataGird 重新指定url以获取不同数据源信息
    rsyslogd: error during parsing file /etc/rsyslog.conf, on or before line 55: warnings occured in fil
    升级automake和autoconf
  • 原文地址:https://www.cnblogs.com/tengtao93/p/5112271.html
Copyright © 2011-2022 走看看