Mybatis 的两种缓存机制
一级缓存(本地缓存):指的是Session级别的缓存,当调用同一个SqlSession去访问数据时,每一次读取的数据都会存储在当前SqlSession中,下一次调用不需要再次从数据库读取,直接从一级缓存中读取即可。
二级缓存(分布式缓存):指的是Mapper级别的缓存,多个SqlSession可以共享缓存,同一个服务器所有实例之间甚至跨服务器共享。
二者区别
一、缓存范围
二、配置:一级缓存不需要配置,二级缓存需要在 MyBatis 配置文件中或通过注解显式开启,并且需要配置相应的缓存实现。
三、性能差异:
一级缓存由于其本地性,访问速度非常快,对于减少数据库访问次数和提升性能有显著效果。
二级缓存虽然访问速度可能不如一级缓存快,但由于其可以跨多个 Session 共享,对于减少数据库的负载和提升应用性能也有很大帮助。
四、适用场景:
一级缓存适用于单个请求内需要多次查询相同数据的场景。
二级缓存适用于多个请求或多个用户之间需要共享数据的场景,如读取远大于写入的操作。
五、一致性和并发问题:
一级缓存由于是本地的,不存在并发访问的问题。
二级缓存由于是跨 Session 的,需要处理并发访问和数据一致性的问题,可能需要引入额外的同步机制。