查询缓存


一、概念

        查询缓存指的是在内存或者外存上建立一个存储空间,用来保存上次的查询结果,夏促再进行同样的查询是,就直接从内存或者外存中读取,大大提升查询效率

二、一级缓存

        范围:一个sqlsession对象,当一个sqlsession对象关闭后,对应的一级缓存会被清空。

        清理条件:执行了增、删、改的commit()方法

                          

三、二级缓存(被多个sqlsession对象共享)

        范围:相同namespaced生成的mapper对象下所有的sqlsession对象

         清理条件:执行了该Mapper对象的增、删、改方法

        原理:sqlsession1------->studentMapper中的查询方法(从数据库中获取)------------>写入二级缓存

                   sqlsession2-------->studentMapper中的查询方法(从二级缓存中获取)

                   sqlsession3-------->studentMapper提交的commit()方法(增、删、改)---------->清理二级缓存

      备注:两个对象执行的方法和代码均相同,不同之处是sqlseesion1中的数据是从数据库中取,sqlsession2中的数据从二级缓存中取

       1. 二级缓存的使用:

                 (1)开启二级缓存

                      1>.Mybatis配置文件       

<setting name="cacheEnable" value=""></setting>

 

                     2>.mapper.xml文件

                        在mapper内部加上<cache />

                 (2)对象实现序列化

        2.禁用二级缓存

               

<select id="queryById" parameter="int" resultType="User" useCache="false">
    select  * from  user where userid=#{userid}
</select>

 

 

四、commit()清理缓存的原因

        对数据库进行增删改查操作,如果不及时清理缓存,就会丢失数据的实时性,造成脏读

         如果有特殊情况,想要在执行commit()方法时并不进行清理缓存,可以在增删改查的标签里设置 flushCache="false"

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM