Mybaits一级缓存和二级缓存分别是什么,区别是什么?

Mybaits一级缓存和二级缓存分别是什么,区别是什么?,第1张

什么是缓存?

        是数据交互的缓冲区,应用程序需要读取数据时,先从数据库将数据去除,放在缓冲区,应            用程序从缓冲区读取数据。

缓存的特点:数据库取出的数据保存在内存中,具备快速读取和使用。

缓存的限制:读取时无需再从数据库获取,数据可能不是最新的。

缓存的功能:减少java Application 与数据库的交互次数,从而提升程序的运行效率。

缓存的适用性:经常查询并且不经常改变的,数据的正确与否对最终结果影响不大的。

缓存的分类:

                一级缓存:会话级别的缓存,针对一次会话操作;

                二级缓存:映射器级别的缓存,针对不同Namespace的映射器;

                自定义缓存:根据各类不同缓存机制,自定义缓存实现方式。

一级缓存:        

        打印:

注意:调用sqlsession的修改,添加,删除,commit(),close()等方法时,就会清空一级缓存。

缓存的配置:

        localCacheScope:表示配置一级缓存,默认是session级别的缓存。

一级缓存的工作流程:

                1.对于某个Select Statement,根据该Statement 生成key;

                2.判断在Local Cache中,该key是否用对应的数据库存在;

                3.如果命中,则跳过查询数据库,继续往下走;

                4.如果没命中,去数据库查询数据,得到查询结果;

                5.将key和查询到的结果作为key和value,放入Local  Cache中;

                6.将查询结果返回;

                7.判断缓存级别是否为STATEMENT级别,如果是的话,清空本地缓存;

 一级缓存失效情况:

                不同SqlSession对应不同的一级缓存

                同一个SqlSession单查询条件不同

                同一个SqlSession两次查询期间执行了任何一次增删改操作

                同一个SqlSession两次查询期间手动清空了缓存

二级缓存:

缓存的配置

                1.在 mybatis的xml配置

                        

                 2.在Mapper.xml中配置

              3.在使用操作中配置

注解配置:

在接口的定义上面直接使用@CacheNamespace 并将blocking设置为true,二级缓存就可以使用了

小结:

                A:Mybatis的二级缓存相对于一级缓存,实现了缓存数据的共享,可控性也更强

                B:二级缓存极大可能会出现错误数据,有设计上的缺陷,安全使用条件比较苛刻

                C:二级缓存分布式环境下,必然会出现读取到错误数据,所以不推荐使用

总结:

        一级缓存:是相对同一个SqlSession对象而言的缓存

        二级缓存:一个namespace下的所有操作语句,都影响者同一个Cache

 

 

                

                

      

        

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/2990419.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)

保存