redis事务、管道及消息通知探究

这个问题面试被问了好几次,还是研究下。

mybatis一级缓存是SqlSession级别的或是Statement级别的,关闭不了,默认是SqlSession级别,当使用一个SqlSession实例多次查询时,如果中间没有穿插增删改,则第二次及之后的查询都不会去查数据库,而是从缓存里面取。

一级缓存配置在mybatis的配置文件中,注意不是映射文件,是配置文件。配置的关键字是localCacheScope,值可以是session或statement。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="localCacheScope" value="statement"/>
</settings>
</configuration>

mybatis一级缓存可能会造成脏数据的情况。sqlSession1查完一次之后,把数据放到缓存中。这时sqlSession2更新了数据库数据,sqlSession1再次查询会直接从缓存里面取,而这时候数据实际上已经发生变化,所以会查出脏数据。

未搭配spring使用时,

SSM或者spring boot时,要用@Transactional注解标注方法,多次查询才会共用一个SqlSession实例,否则每次查询都会生成一个新的SqlSession实例。

二级缓存

二级缓存不建议用,用总开关关闭即可,默认也是开。也是在mybatis配置文件中配置,配置关键字是cacheEnabled,值可以是true或false,默认是true。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="cacheEnabled" value="false"/>
</settings>
</configuration>
上一篇:5分钟解决google play上架App设置隐私政策声明问题


下一篇:A星寻路算法介绍