MyBatis功能点之一(补充):MyBatis缓存Cache包

  从MyBatis功能点之一(1):MyBatis缓存初体验中,可知二级缓存是跨session的,而一级缓存不是。为什么呢?通过Mybatis源码分析,一级缓存默认使用底层数据结构为PerpetualCache为数据查询提供效率。同时MyBatis不止实现了PerpetualCache,还有其他实现提供其他功能,如下:

 

   可以从UML图上看,除了PerpetualCache是Cache的具体实现,其他它是Cache的装饰器类(其特点是每个类自身有一个Cache接口的属性,即类本身装饰器自身)。

  在Mybatis查询一二级的缓存中有介绍PerpetualCache这个实现类,但是使用的范围不同导至缓存的使用范围也不同。本文中主要介绍Cache的其他装饰器类。

  按功能分类,缓存装饰器类可以分为以下几类:

    同步装饰器:为缓存增加同步功能,SynchronizedCache;

    日志装饰器:为缓存增加日志功能,LoggingCache;

    清理装饰器:为缓存中的数据增加清理功能,FifoCache,LruCache,WeakCache,SoftCache等;

    阻塞装饰器:为缓存增加阻塞功能,BlockingCache;

    定时清理装饰器:为缓存增加定时刷新功能, ScheduledCache;

    系列化装饰器:为缓存增加序列化功能,SerialzedCache;

    事务装饰器:用于支持事务操作,TransactionalCache。

  这类装饰器缓存是如何组建的呢?在CacheBuilder类源码中可以得到答案:

    

 

   从上图看,Mybatis默认使用了清理缓存LruCache。

    

 

 

    

posted on 2021-03-07 19:33  池塘里洗澡的鸭子  阅读(67)  评论(0编辑  收藏  举报