Mybatis源码缓存的实现

缓存

缓存分类

1.ORM(对象关系映射)框架 集成 缓存

Hibernate,Mybatis

操作缓存快,缓存分配的内存少(在一台虚拟机)

2.第三方 中间件 充当缓存(使用代理)

Redis,Memcache,自研的方式 等

内存大,但是网络开销大(通过网络连接)

Mybatis缓存分析

Mybatis缓存二层体系

一级缓存 默认开启

程序 --> 缓存 --> 数据库

一级缓存只对本SqlSession有效,变换SqlSession后不能在原有的sqlSession上获取缓存

二级缓存 (全局缓存)

开启二级缓存的步骤:

1.mybatis-config中   <setting> 的配置【可以不配置】

2.mapper文件引入二级缓存 Cache --> Cache标签

3.查询<select userCache 属性【可以不配置】

4.事务存在

CachingExecutor的创建:

Configuration:

newExecutor()中new CachingExecutor(simpleExecutor)

Cache的创建

mybatis-config.xml --> <mapping>

xxxMapper.xml --> <cache> --> useNewCache

useNewCache:

        1.默认缓存

        

        2.创建新的实现

        Cache cache = newBaseCacheInstance(implementation, id);

        3.读取 整合<cache <property> 增加额外的参数(内置缓存不用,自定义缓存         redis,osCache,Ehcache)

        4.增加装饰器

        默认:<cache/> PerpetualCache和LruCache

        <cache blocking=""  eviction="" />

                blocking = new BlockingCache

                eviction = "FIFO" --> 默认LRUCache 替换FIFOCache

                ...

CachingExecutor 二级缓存操作时通过 MappedStatement 获取 Cache缓存


Mybatis先查询二级缓存,再查询一级缓存

Configuration --> Executor

        CachingExecutor

                tcm.getObject

                        Delegate.query(simpleExecutor的query方法)

                                BaseExecutor(lcoalCache)

                                        SimpleExecutor

二级缓存获取位置:CachingExecutor#query

一级缓存获取位置:BaseExector#query


在多表查询使用Cache时,避免脏数据的产生,需要使用<cache-ref>来关联xxxMapper.xml文件,使其共用一个Cache集合

但是当关联的表多了之后,会出现一个表的数据更改导致所有表的数据删除问题,所以我们要修改源码,当修改特定表的数据时只删除和该表有关联的缓存数据

相关推荐

  1. Mybatis总结

    2024-06-12 12:20:01       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-12 12:20:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-12 12:20:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-12 12:20:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-12 12:20:01       18 阅读

热门阅读

  1. 深入分析C#中的StringBuilder

    2024-06-12 12:20:01       9 阅读
  2. 云waf的负载均衡均衡流量分发功能

    2024-06-12 12:20:01       9 阅读
  3. 大数据之Hadoop是什么?Hadoop起源?

    2024-06-12 12:20:01       10 阅读
  4. Hostinger怎么购买最省钱,大面额优惠券获取

    2024-06-12 12:20:01       9 阅读
  5. 支持向量机

    2024-06-12 12:20:01       8 阅读
  6. Linux忘记密码的解决方法

    2024-06-12 12:20:01       5 阅读
  7. 如何寻找海外客户

    2024-06-12 12:20:01       8 阅读
  8. Python001

    Python001

    2024-06-12 12:20:01      5 阅读
  9. GAN相关知识

    2024-06-12 12:20:01       4 阅读