mybatis 一級緩存二級緩存要點

慣例,不介紹概念,這裏記錄需要記錄的要點:

  • 緩存通過HashMap實現

  • 一級緩存作用域是sqlSession,默認開啓,在高併發或者分佈式(每個節點有自己的緩存)的情況下會產生髒數據。所以建議

  • 一級緩存級別調成 statement,每次查詢結束都會清掉一級緩存
    mybatis集合spring一級緩存失效問題:
    https://www.cnblogs.com/zemliu/p/3239014.html
    未開啓事務的情況之下,每次查詢,spring都會關閉舊的sqlSession而創建新的sqlSession,因此此時的一級緩存是沒有啓作用的
    開啓事務的情況之下,spring使用threadLocal獲取當前資源綁定同一個sqlSession,因此此時一級緩存是有效的

  • 二級緩存作用域是namespace,默認也是開啓的(總開關開啓),但需要配置才能生效

  • 二級緩存默認會使用(Least Flush Interval,LRU最近最少使用的)算法來收回

  • 如果需要開啓二級緩存,resultMap的對應的實體類必須要序列化,不然會報java.io.NotSerializableException

  • 映射語句文件中所有的insert update delete語句會刷新緩存

  • 數據的查詢順序是 二級緩存 -> 一級緩存 -> 數據庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章