Mybatis二级缓存、分布式二级缓存、逆向工程、Spring 整合 --day06

Mybatis二级缓存、分布式二级缓存、逆向工程、Spring 整合 --day06

一、什么是二级缓存

上一篇介绍了一级缓存,一级缓存是一个sqlSession使用一个缓存区域。那么二级缓存呢?
  思考,多个sqlSession,但是每个sqlSession都执行 通过id查询用户,如果只有一级缓存可能出现多次 -查询用户id=1的用户信息- 那么能不能让多个sqlSession共享一块缓存区域呢,当然可以二级缓存可以实现这一部分需求,–一级缓存实在内存汇总缓存,二级缓存可能在内存中也可以在磁盘,服务器等任何位置上。

二、开启和关闭二级缓存

settings 中设置:cacheEnable 为true——也是默认值,在mapper.xml文件中 mapper标签下 加上<cache/> 标签即可开启二级缓存 对某一statement禁用二级缓存,可以设置userCache 为false

三、二级缓存范围

同一个Mapper只有一个二级缓存区域(一个明明空间对应一个二级缓存区域)
多个sqlSession(都创建UserMapper代理对象),那么它们都能访问到这一块缓存区域

四、二级缓存规则

 跟一级缓存一样,首次查询某条记录放入缓存,下次查找缓存中存在直接得到,任何增删改操作,commit后都会清空缓存区域。

五、cache 参数

1.flushInterval 缓存区刷新间隔
2.readonly 设置为true 得到的结果不允许修改
3.size 设置缓冲区域大小

六、二级缓存应用和不足

 应用场景:
 主要用于实时性要求不高的访问较多的查询和查询比较耗费时间资源的复杂查询。
 实际应用中配合flushInterval来使用,设置刷新时间,访问时从缓冲区获取,对实时性要求不高。

 明显不足:
 当查询频繁的时候,缓冲区中包含了大量数据,但是只有极少部分发生了修改,清空整个缓冲区,对查询效率影响很大,对单条数据修改,只改变缓冲区中的对应数据需要三级缓存来完成。

七、分布式二级缓存

使用分布式缓存的原因:
 为了提高系统并发能力,系统性能,系统多采用分布式、集群式部署。
 用户访问系统,系统生成用户缓存信息,因为负载均衡用户下一时间访问系统访问的是另一台服务器那么这时候,缓存数据如果仍然在原来的服务器上,那么系统此时是无法获取到这一部分缓存数据的,最常见的用户登录,登录相关信息如果在一台服务器上缓存,那么下一时间访问,可能访问的另一服务器,得不到用户的登录状态相关信息,让用户再次登录显然是不可能的。
 解决这种问题的方式,通过分布式缓存将缓存数据集中管理,提供给每个服务器使用。
mybatis 和 分布式框架的整合
 Mybatis提供了一个cache接口,并给出标准实现类 mybatis.cache下的Catch类 可以参考实现。
 分布式框架redis、memached、ehcache等都包含了 实现mybatis的cache接口的实现类。
将这个类的全限定名 赋给mapper文件中配置 <cache/>的typle属性就可以了

八、Spring整合Mybatis

  放到后面Spring总结时写例子

九、Mybatis逆向工程

 Mybatis给定的包中修改 generatorConfig.xml 文件 修改数据库连接信息,要逆向生成的表的信息 run 就能得到两个包 pojo 和mapper

猜你喜欢

转载自blog.csdn.net/qq_38325853/article/details/85171362