MyBatis中一級(jí)緩存和二級(jí)緩存的區(qū)別是什么

小億
90
2024-04-07 17:37:40

MyBatis中一級(jí)緩存和二級(jí)緩存的區(qū)別如下:

  1. 一級(jí)緩存:
  • 一級(jí)緩存是SqlSession級(jí)別的緩存,即同一個(gè)SqlSession中執(zhí)行的查詢結(jié)果會(huì)被緩存起來(lái),當(dāng)再次執(zhí)行相同的查詢時(shí),MyBatis會(huì)先從緩存中獲取結(jié)果,而不會(huì)再去數(shù)據(jù)庫(kù)中查詢。
  • 一級(jí)緩存是默認(rèn)開(kāi)啟的,無(wú)法關(guān)閉。
  • 一級(jí)緩存的生命周期僅限于SqlSession的生命周期,即在同一個(gè)SqlSession對(duì)象中有效,不同SqlSession之間的緩存是相互隔離的。
  1. 二級(jí)緩存:
  • 二級(jí)緩存是Mapper級(jí)別的緩存,即不同的SqlSession可以共享同一個(gè)Mapper的緩存結(jié)果。
  • 二級(jí)緩存需要手動(dòng)配置開(kāi)啟,配置在Mapper的xml文件中。
  • 二級(jí)緩存的生命周期是整個(gè)應(yīng)用程序級(jí)別的,即在同一個(gè)應(yīng)用程序中不同的SqlSession之間可以共享同一個(gè)Mapper的緩存結(jié)果。
  • 二級(jí)緩存的失效機(jī)制是基于緩存策略(LRU、FIFO、SOFT、WEAK等),也可以通過(guò)手動(dòng)刷新或清空緩存來(lái)使緩存失效。
  • 二級(jí)緩存是跨SqlSession的,能夠提高查詢性能,但需要注意緩存的數(shù)據(jù)一致性和并發(fā)性問(wèn)題。

0