一般用mybatis的xml或者通用mapper进行对数据库搜索数据时,都是以先以二级缓存是否开启和数据的有无,然后再是一级缓存数据的有无,最后才是找数据库吗?
图1
图2
mybatis搜索数据的过程就是将条件语句什么的变成sql语句去从数据库里查询数据,那是否可以理解为一级缓存就相当于用sql语句去数据库查?
那图1的顺序是直接从一缓开始吗?
那图2的顺序是直接从一缓开始吗?
一级缓存是作用域是sqlSession , 如果你在同一个sqlSession中调用同一个方法而且参数都是一样的, 那么第二次调用时就会走一级缓存, 而不去查数据库
二级缓存作用域是sqlSessionFactory, 需要在mybatis的配置文件中开启, 默认是开启的; 需要在接口上使用@CacheNameSpace 或者 在xml文件中用<cache>标签, 才会使用二级缓存
MyBatis的一级缓存和二级缓存都有各自的优点和缺点,具体应该根据实际情况进行选择。
一级缓存的优点是:
减少数据库的访问次数,提高系统性能。
对于同一个SqlSession,可以保证查询结果的一致性。
一级缓存的缺点是:
只能在同一个SqlSession中共享缓存,无法在多个SqlSession之间共享缓存。
对于频繁的查询操作,容易导致缓存命中率低,从而降低系统性能。
二级缓存的优点是:
二级缓存的缺点是:
对于频繁的更新操作,容易导致缓存失效,从而降低系统性能。
对于复杂的查询操作,容易导致缓存命中率低,从而降低系统性能。
在真实生产环境中,是否开启二级缓存应该根据具体情况进行选择。如果系统中的数据更新频率较高,建议不要开启二级缓存;如果系统中的数据更新频率较低,可以考虑开启二级缓存以提高系统性能。同时,需要根据具体的业务场景进行缓存管理和优化,以保证系统的稳定性和性能。