mybatis一级缓存和二级缓存 (mybatis)
本文目录导航:
mybatis一级缓存和二级缓存
一级缓存:Mybatis对缓存提供允许,然而在没有性能的自动状况下,它只开启一级缓存,一级缓存只是相关于同一个SqlSession而言。
所以在参数和SQL齐全一样的状况下,咱们经常使用同一个SqlSession对象调用一个Mapper方法,往往只口头一次性SQL,由于经常使用SelSession第一次性查问后,MyBatis会将其放在缓存中,以后再查问的时刻,假设没有申明须要刷新,并且缓存没有超时的状况下,SqlSession都会取出以后缓存的数据,而不会再次发送SQL到数据库。
二级缓存:MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查问的效率,以提高运行的性能。
mybatis的缓存有几种
1、一级缓存
MyBatis自动开启了一级缓存,一级缓存是在SqlSession 层面启动缓存的。
即,同一个SqlSession ,屡次调用同一个Mapper和同一个方法的同一个参数,只会启动一次性数据库查问,而后把数据缓存到缓冲中,以后间接先从缓存中取出数据,不会间接去查数据库。
然而不同的SqlSession对象,由于不用的SqlSession都是相互隔离的,所以相反的Mapper、参数和方法,他还是会再次发送到SQL到数据库去口头,前往结果。
2、二级缓存
为了克制这个疑问,须要开启二级缓存,是的缓存zaiSqlSessionFactory层面给各个SqlSession 对象共享。
自动二级缓存是不开启的,须要手动启动性能。
假设这样性能的话,很多其余的性能就会被自动启动,如:
每次查问数据库前,MyBatis都会先在缓存中查找能否有该缓存对象。
只要当调用了commit() 方法,MyBatis才会往缓存中写入数据,数据记载的键为数字编号+Mapper名+方法名+SQL语句+参数格局,值为前往的对象值。
spring系列——Mybatis +Tomcat:缓存原理+Container+子容器等
Mybatis 缓存机制包括一级缓存和二级缓存。
一级缓存是SqlSession级别的,当同一SqlSession口头相反SQL查问时,从第二次起间接从缓存失掉,最多缓存1024条SQL。
二级缓存是mapper级别的,不同SqlSession间共享缓存。
一级缓存原理:初次查问写入缓存,再次查问间接失掉,若两边口头修正、减少、删除操作则缓存清空。
二级缓存原理:以命名空间为单位创立缓存结构,婚配缓存再启动数据库查问。
二级缓存性能包括全局启用、Mapper性能和查问节点设置。
Tomcat架构包括顶层Server、Service、Connector和Container。
Server治理整个服务,蕴含至少一个Service,Service由Connector和Container组成。
Connector用于衔接和恳求封装,Container用于Servlet治理和恳求解决。
一个Server有且仅有一个Server,一个Service有多个Connector和一个Container,一个Service可以蕴含多个Service。
Server控制Tomcat生命周期,Service提供服务,Connector解决恳求,Container封装和治理Servlet。
Connector接纳恳求,封装成Request和Response,交由Container解决,解决终了后前往给Connector,最后由Connector经过Socket将结果前往客户端。
Connector经常使用ProtocolHandler解决恳求,蕴含Endpoint、Processor和Adapter。
Endpoint解决底层Socket衔接,Processor成功HTTP协定,Adapter将恳求适配到容器解决。
Connector外部蕴含四个子容器:Engine、Host、Context、Wrapper,区分用于治理站点、站点、运行和Servlet。
Container经常使用Pipeline-Valve管道解决恳求,Valve是责任链形式,从最顶层容器到最底层容器依次口头。
Engine、Host、Context和Wrapper容器区分对应EngineValve、HostValve、ContextValve、WrapperValve。
恳求解决流程从Connector开局,依次经过各层容器,最终在Wrapper容器内创立FilterChain,口头Filter和Servlet解决恳求。
一切管道口头终了,前往结果给Connector,经过Socket前往客户端。