(相关资料图)

一、一级缓存

1、在⼀个sqlSession中,对User表根据id进行两次查询,查看他们发出sql语句的情况。

2、同样是对user表进⾏两次查询,只不过两次查询之间进⾏了⼀次update操作。

3、总结

(1)第⼀次发起查询⽤户id为1的⽤户信息,先去找缓存中是否有id为1的⽤户信息,如果没有,从数据库查询⽤户信息。得到⽤户信息,将⽤户信息存储到⼀级缓存中。

(2)如果中间sqlSession去执⾏commit操作(执⾏插⼊、更新、删除),则会清空SqlSession中的⼀级缓存,这样做的目的为了让缓存中存储的是最新的信息,避免脏读。

(3)第⼆次发起查询用户id为1的⽤户信息,先去找缓存中是否有id为1的⽤户信息,缓存中有,直接从缓存中获取用户信息

二、⼆级缓存

⼆级缓存的原理和⼀级缓存原理一样,第⼀次查询,会将数据放⼊缓存中,然后第⼆次查询则会直接去缓存中取。

但是⼀级缓存是基于sqlSession的,⽽⼆级缓存是基于mapper⽂件的namespace的,也就

是说多个sqlSession可以共享⼀个mapper中的⼆级缓存区域,并且如果两个mapper的namespace相同,即使是两个mapper,那么这两个mapper中执⾏sql查询到的数据也将存在相同的⼆级缓存区域中。

推荐内容