MyBatis 一级缓存和二级缓存是什么数据结构?

MyBatis 的一级缓存和二级缓存的数据结构主要是基于HashMap实现的。

  1. 一级缓存(Session Cache): MyBatis 的一级缓存是基于PerpetualCache(永久缓存)实现的,而PerpetualCache内部使用了 Java 的HashMap作为存储结构。每个SqlSession都有一个自己的一级缓存,当SqlSession关闭或提交时,该SqlSession的一级缓存就会清空。

  2. 二级缓存(Mapper Cache): MyBatis 的二级缓存同样是基于PerpetualCache实现的,PerpetualCache内部使用HashMap作为存储结构。二级缓存是跨SqlSession的,对于同一个SqlSessionFactory,多个SqlSession可以共享其二级缓存。当调用SqlSessionclearCache方法时,就会清空当前SqlSessionFactory的二级缓存。

在实际使用中,二级缓存还可以通过装饰者模式添加各种装饰器,例如FifoCache(先进先出缓存)、LruCache(最少使用缓存)、SoftCache(软引用缓存)等,以实现更多的缓存策略。

需要注意的是,无论是一级缓存还是二级缓存,都不适合用于存储大量数据,因为它们都是基于内存的缓存,如果存储大量数据,可能会导致内存溢出。同时,MyBatis 的缓存都是本地缓存,不适合在分布式环境中使用。如果在分布式环境中需要使用缓存,可以考虑使用如Redis等分布式缓存解决方案。

发表评论

后才能评论