MyBatis 自带的二级缓存存在的问题
在前面我们使用 @CacheNamespace 实现了 430.MyBatis的二级缓存 ,这个底层使用 HashMap 来实现。在 单机环境 下没有问题,但是在 分布式环境 下就不行了。
...大约 2 分钟
在前面我们使用 @CacheNamespace 实现了 430.MyBatis的二级缓存 ,这个底层使用 HashMap 来实现。在 单机环境 下没有问题,但是在 分布式环境 下就不行了。
二级缓存的原理和一级缓存一样,第一次查询会将数据放到缓存中,然后第二次查询直接去缓存读取。
但是一级缓存是基于 SqlSession 的,二级缓存是基于 mapper 的 namespace 的。
也就是说,多个 SqlSession 可以共享同一个二级缓存区域。如果两个 mapper 的 namespace 相同,那么即使是两个 mapper,这两个 mapper 执行 sql 查询的数据也将保存在相同的二级缓存区域中。
缓存就是内存中的数据,常常来自对数据库查询结果的保存。
使用缓存可以避免频繁与数据库交互,进而提高响应速度。
MyBatis 也提供了对缓存的支持,分为 一级缓存 和 二级缓存。可以用下面的图来理解: