
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
缓存机制的应用在许多软件编程开发项目中都是非常常见的一个功能应用,而本文我们就通过案例分析来简单了解一下,Mybatis缓存机制应用分析。
Mybatis提供了两种不同的缓存机制,也就是我们经常说的一级缓存、二级缓存。
一级缓存:也叫LocalCache,是基于SqlSession的缓存,也就是说缓存是存储在SqlSession这个级别的,会随着SqlSession的关闭而消失。
二级缓存:是跨SqlSession生命周期的,二级缓存的作用域是定义在namespace级别的,对应着mapper.xml文件的定义。跨作用域生效需要进行专门的定义。
其实程序员应该认真对待的是Mybatis的二级缓存机制,因为一级缓存机制是默认开启的、几乎也不存在数据不一致的问题,二级缓存机制是需要通过配置开启、而且用不好很容易导致数据不一致的问题。
一级缓存
一级缓存是默认开启的,我们不需要做任何配置就可以使用Mybatis的一级缓存。
如果你不想开启Mybatis的一级缓存,可以通过Settings配置做全局关闭(localCacheScope=STATEMENT)。
如果你只是针对某一句sql不想开启一级缓存,则可以在mapping的xml文件中针对该sql语句配置flushCache为true,注意flushCache对一级缓存和二级缓存都生效。
建议还是采用Mybatis的默认配置,开启一级缓存,尤其是对于那些有初级程序员参与的项目,他们对性能的问题考虑的可能会少一点,在一个交易中对同一条数据可能会多次查询,这个时候我们当然可以通过框架设计、培训、codereview等方法尽可能避免这种情况,但是如果无法避免的话,起码Mybatis的一级缓存可以帮助我们在一定程度上避免无谓的数据库请求。
引入缓存的目的是为了尽可能减少数据库I/O从而提高系统性能的,如果一次查询从数据库中获取到了id=1的用户数据并缓存起来,二次再执行该查询获取id=1的用户数据的时候,Mybatis就会检查缓存中是否已经有该数据,如果有的话Mybatis就不会再次执行数据库查询了,会直接给请求端返回缓存中的数据。这个时候我们也经常称为缓存命中。
如果在两次查询之间有操作修改了id=1的用户信息怎么办?Mybatis如果不知道本次修改而直接返回了缓存数据的话,就会导致数据不一致的问题,因为应用给前端返回了不正确的数据。
Mybatis当然有自己的解决方案,这个解决方案就是在更新数据的时候刷新缓存,刷新缓存其实就是清空缓存,那么在修改之后的次查询就会由于无法命中缓存而通过数据库查询来获取数据,这样的话就不会导致数据不一致的问题了。
但是现实情况往往会比你想象中的复杂,比如说你的用户查询的sql语句定义在mapperA.xml中,而用户更新的sql语句定义在mapperB.xml中。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。