了解Mybatis中的缓存机制
大约 1 分钟
在过去的很长时间我都只会使用Mybatis,了解了如何使用这个框架,会用它进行代码开发而已,但其实远远不够的。
为什么需要缓存
缓存通常是为了方便访问更加快速,减少底层的压力而存在的。那么在Mybatis这样一个ORM框架中,它的底层是数据库,所以及时不学习看到标题应该也能推测出它缓存的就是我们通过sql查到的数据库里面的数据。
一级缓存
同一个SqlSession两次执行相同的sql,前一次查询的结果会放到缓存中,第二次就会从内存中获取。当一个SqlSession关闭了 其一级缓存也就会丢失,这是Mybatis默认的缓存机制。SqlSession中执行了任何一个update(修改)、delete(删除)、insert(新增)操作,都会清空PerpetualCache
对象中的数据,但是SqlSession对象仍然可用。
二级缓存
二级缓存是多个SqlSession共享的。 作用域是同一个namespace,需要手动开启。
二级缓存相比之下力度更大,它能跨会话 单机环境下 使用二级缓存可以避免不同会话写操作导致的脏数据 分布式环境下 即使使用二级缓存可以跨会话,但还是会出现脏数据,无法避免
扩展
如果在分布式环境下想要降低数据库压力,可以考虑使用一些缓存中间件来实现。分布式缓存也是后续的一门课程。