MyBatis 中有两级缓存:一级缓存(Local Cache)和二级缓存(Global Cache)。

一级缓存(Local Cache):

  • 范围: 一级缓存是 MyBatis 默认开启的,它是针对于同一个 SqlSession 的缓存,即在同一个 SqlSession 内部有效。
  • 作用范围: 当执行相同的查询(SQL 和参数相同)时,结果会被缓存在该 SqlSession 内部,后续查询相同数据时直接从缓存中获取,减少数据库查询次数。
  • 生命周期: 一级缓存的生命周期为一个 SqlSession,当 SqlSession 关闭或提交时,一级缓存被清空,数据失效。

二级缓存(Global Cache):

  • 范围: 二级缓存是跨 SqlSession 的缓存,它可以被多个 SqlSession 共享使用。
  • 作用范围: 当开启二级缓存后,查询的结果会被缓存起来,在不同的 SqlSession 中执行相同的查询时,如果数据在二级缓存中存在,则可以直接从缓存中获取,而不需要再去数据库查询。
  • 生命周期: 二级缓存的生命周期与整个 Mapper 映射文件相关联,当执行 DML(insert、update、delete)操作时,会清空对应的缓存。

区别:

  1. 范围不同: 一级缓存针对于单个 SqlSession,而二级缓存是跨 SqlSession 的,可以被多个 SqlSession 共享使用。
  2. 作用范围不同: 一级缓存是在同一个 SqlSession 内部有效,而二级缓存可以被多个 SqlSession 共享,能够跨会话共享缓存数据。
  3. 生命周期不同: 一级缓存的生命周期为一个 SqlSession,而二级缓存的生命周期与整个 Mapper 映射文件相关联。

在实际应用中,可以根据需求选择开启或关闭一级缓存和二级缓存,并根据业务特点合理使用缓存,避免数据不一致或缓存带来的问题。

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.