Mybatis缓存+Tomcat架构

Mybatis中有一级缓存和二级缓存,默认情况下一级缓存是开启的,而且是不能关闭的。一级缓存
是指 SqlSession 级别的缓存,当在同一个 SqlSession 中进行相同的 SQL 语句查询时,第二次以
后的查询不会从数据库查询,而是直接从缓存中获取,一级缓存最多缓存 1024 条 SQL。二级缓存
是指可以跨 SqlSession 的缓存。是 mapper 级别的缓存,对于 mapper 级别的缓存不同的
sqlsession 是可以共享的。

Mybatis缓存+Tomcat架构_第1张图片

Mybatis  的一级缓存原理 ( sqlsession 级别 )
第一次发出一个查询 sql,sql 查询结果写入 sqlsession 的一级缓存中,缓存使用的数据结构是一
个 map。
key:MapperID+offset+limit+Sql+所有的入参
value:用户信息
同一个 sqlsession 再次发出相同的 sql,就从缓存中取出数据。如果两次中间出现 commit 操作
(修改、添加、删除),本 sqlsession 中的一级缓存区域全部清空,下次再去缓存中查询不到所
以要从数据库查询,从数据库查询到再写入缓存。

 

二级缓存原理 ( mapper 基本 )
二级缓存的范围是 mapper 级别(mapper同一个命名空间),mapper 以命名空间为单位创建缓
存数据结构,结构是 map。mybatis 的二级缓存是通过 CacheExecutor 实现的。CacheExecutor

其实是 Executor 的代理对象。所有的查询操作,在 CacheExecutor 中都会先匹配缓存中是否存
在,不存在则查询数据库。
key:MapperID+offset+limit+Sql+所有的入参

具体使用需要配置:
1.  Mybatis 全局配置中启用二级缓存配置
2.  在对应的 Mapper.xml 中配置 cache 节点
3.  在对应的 select 查询节点中添加 useCache=true

 

Tomcat架构


    tomat + spring mvc 是目前比较流行java微服务体系架构,包括现在的spring boot以及基于spring boot的进一步应用化封装的spring cloud框架,底层都是基于tomcat + spring mvc的框架。因此学习tomcat + spring mvc的基础原理,对于解决使用中出现的问题会有比较大的帮助。
 

tomcat内部的基本容器构成
    所谓容器(Container),并不是常说的用来存储数据结构的类,比如Collection、Set、List等,而是专指tomcat和spring mvc中用来对功能和结构进行分层抽象的概念(类或者接口)。tomcat的基本容器结构如图所示:
Mybatis缓存+Tomcat架构_第2张图片

    tomcat最顶层的容器Server,代表整个tomcat服务器,一个Server可以包含一个或者多个Service。一个Service包含一个或者多个Connetor,但是只能包含一个Container。Connector主要用来处理连接相关的事,比如网络套接字Socket的监听、请求request的接收和应答response的发送。这里的Container是一个抽象的概念,一个接口。其实是指一个Service只能包含一个Engine–Engine继承自Container。Engine容器结构如图所示:
Mybatis缓存+Tomcat架构_第3张图片

其中Engine、Host、Context和Wrapper都继承自Container。
    Engine用来管理多个站点,即可以有多个Host。Host代表一个站点,其实是一个虚拟主机。Context,上下文,代表一套应用程序,一套应用程序总是有相同的应用上下文配置。最后是Wrapper,每个wrapper只有一个Servlet,而每个Servlet即对应每个开发的spring mvc服务程序。所以我们开发的spring mvc服务程序都是通过Wrapper加载到tomcat中。Context和Wrapper是动态添加的,我们在tomcat的指定目录下每添加一个war包,tomcat加载war包时,就可以添加Context和Servlet。
 

大佬文章:

https://blog.csdn.net/u013212754/article/details/103203836

你可能感兴趣的:(Spring)