mybatis的2种缓存机制(1)

mybatis的2种缓存机制:一级缓存(SqlSession 级别)

在实际开发中,为了提高数据库的查询速度,我们会用到缓存,而mybatis本身也提供了2种缓存机制来查询缓存来缓存数据,从而达到提高查询性能。mybatis的2中缓存机制分别为一级缓存(SqlSession级别的缓存)二级缓存(mapper级别的缓存,是多个SqlSession共享的)。mybatis主要是通过缓存机制减轻数据压力,来达到提高数据库性能的目的。

注:mybatis的缓存机制是基于id进行缓存的。

现在聊聊一级缓存(SqlSession级别,mybatis默认开启一级缓存):

SqlSession缓存在操作数据库时需要构造SqlSession对象,在对象中有一个HashMap用于缓存数据的,不同的SqlSession之间的缓存数据区域(HashMap)是互相不影响的。作用域只在当前的SqlSession。

注:mybatis使用HashMap缓存数据时,是使用对象的id作为key,而对象作为value保存的。

比如当前根据id=1查询用户,mybatis执行会到底层数据库查询该用户数据,完毕后会把查询到该用户的数据写到缓存(内存)中,第二次再查询id=1的用户时,mybatis不再去底层数据库查询该用户数据,而是直接从缓存中得到该用户数据,从而提高了查询效率

注:如果你在第一次执行了id=1的查询用户操作,之后再执行DML操作(insert,update,delete),并提交到数据库,再第二次执行id=1的查询用户操作,这时一级缓存是不起作用的。

Why:为什么这时一级缓存不起作用呢?

因为当你执行了DML操作时,会清空当前SqlSession中的一级缓存,这样做的目的是为了保证缓存中存储的数据是最新的信息,避免出现脏读现象。所以第二次再执行id=1的查询用户操作,就会重新的去数据库查询,而不是从缓存中读取。


我的座右铭:不会,我可以学;落后,我可以追赶;跌倒,我可以站起来;我一定行。

猜你喜欢

转载自blog.csdn.net/weixin_39220472/article/details/80366505