日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Mybatis 为什么不要用二级缓存

發布時間:2023/12/15 综合教程 30 生活家
生活随笔 收集整理的這篇文章主要介紹了 Mybatis 为什么不要用二级缓存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://www.cnblogs.com/liouwei4083/p/6025929.html

mybatis 二級緩存不推薦使用

一 mybatis的緩存使用。

大體就是首先根據你的sqlid,參數的信息自己算出一個key值,然后你查詢的時候,會先把這個key值去緩存中找看有沒有value,如果有,直接返回出來,就不查詢db了。如果沒有,那么查詢db,然后將key,value保存到緩存中,以便下次使用。

1.1mybatis的一級緩存是基于sqlsession為生命周期的

當你這個session沒有了,緩存就沒有了,其次當你sql執行!isselect語句的時候,緩存也會被直接全部清理掉以保證數據一致性。

  public int update(MappedStatement ms, Object parameter) throws SQLException {
    ErrorContext.instance().resource(ms.getResource()).activity("executing an update").object(ms.getId());
    if (closed) throw new ExecutorException("Executor was closed.");
     //清理緩存
    clearLocalCache();
    return doUpdate(ms, parameter);
  }

1.2 mybatis的二級緩存是基于application為生命周期的

范圍是按照每個namepace一個緩存來存貯和維護,同一個namespace放到一個緩存對象中,當這個namaspace中執行了!isselect語句的時候,整個namespace中的緩存全部清除掉。

  public int update(MappedStatement ms, Object parameterObject) throws SQLException {
     //清理緩存,并且!isselect語句的flushcache都是默認為true的。
    flushCacheIfRequired(ms);
    return delegate.update(ms, parameterObject);
  }


以下摘抄自網絡觀點文字 http://blog.csdn.net/isea533/article/details/44566257

三、Cache使用時的注意事項

1. 只能在【只有單表操作】的表上使用緩存

不只是要保證這個表在整個系統中只有單表操作,而且和該表有關的全部操作必須全部在一個namespace下。

2. 在可以保證查詢遠遠大于insert,update,delete操作的情況下使用緩存

這一點不需要多說,所有人都應該清楚。記住,這一點需要保證在1的前提下才可以!

四、避免使用二級緩存

可能會有很多人不理解這里,二級緩存帶來的好處遠遠比不上他所隱藏的危害。

緩存是以namespace為單位的,不同namespace下的操作互不影響。

insert,update,delete操作會清空所在namespace下的全部緩存。

通常使用MyBatis Generator生成的代碼中,都是各個表獨立的,每個表都有自己的namespace。

為什么避免使用二級緩存

在符合【Cache使用時的注意事項】的要求時,并沒有什么危害。

其他情況就會有很多危害了。

針對一個表的某些操作不在他獨立的namespace下進行。

例如在UserMapper.xml中有大多數針對user表的操作。但是在一個XXXMapper.xml中,還有針對user單表的操作。

這會導致user在兩個命名空間下的數據不一致。如果在UserMapper.xml中做了刷新緩存的操作,在XXXMapper.xml中緩存仍然有效,如果有針對user的單表查詢,使用緩存的結果可能會不正確。

更危險的情況是在XXXMapper.xml做了insert,update,delete操作時,會導致UserMapper.xml中的各種操作充滿未知和風險。

有關這樣單表的操作可能不常見。但是你也許想到了一種常見的情況。

多表操作一定不能使用緩存

為什么不能?

首先不管多表操作寫到那個namespace下,都會存在某個表不在這個namespace下的情況。

例如兩個表:role和user_role,如果我想查詢出某個用戶的全部角色role,就一定會涉及到多表的操作。

<select id="selectUserRoles" resultType="UserRoleVO">
    select * from user_role a,role b where a.roleid = b.roleid and a.userid = #{userid}
</select>

像上面這個查詢,你會寫到那個xml中呢??

不管是寫到RoleMapper.xml還是UserRoleMapper.xml,或者是一個獨立的XxxMapper.xml中。如果使用了二級緩存,都會導致上面這個查詢結果可能不正確。

如果你正好修改了這個用戶的角色,上面這個查詢使用緩存的時候結果就是錯的。

這點應該很容易理解。

在我看來,就以MyBatis目前的緩存方式來看是無解的。多表操作根本不能緩存。

如果你讓他們都使用同一個namespace(通過<cache-ref>)來避免臟數據,那就失去了緩存的意義。

看到這里,實際上就是說,二級緩存不能用。整篇文章介紹這么多也沒什么用了。

五、挽救二級緩存?

想更高效率的使用二級緩存是解決不了了。

但是解決多表操作避免臟數據還是有法解決的。解決思路就是通過攔截器判斷執行的sql涉及到那些表(可以用jsqlparser解析),然后把相關表的緩存自動清空。但是這種方式對緩存的使用效率是很低的。

設計這樣一個插件是相當復雜的,既然我沒想著去實現,就不廢話了。

最后還是建議,放棄二級緩存,在業務層使用可控制的緩存代替更好。

總結

以上是生活随笔為你收集整理的Mybatis 为什么不要用二级缓存的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99精品在线免费观看 | jzjzjz欧美丰满少妇 | 欧美zzz物交 | 久草视频在线免费播放 | 久草免费福利视频 | 一区二区三区免费在线观看视频 | 亚洲成人一区二区三区 | av五月天在线 | 亚洲天堂三级 | 久久久激情视频 | 欧美亚洲成人网 | 国产一区二区在线视频 | 免费激情网址 | 99超碰在线观看 | 性色在线 | 蜜臀久久精品 | 美女福利在线视频 | 黄色成人在线 | 日本黄色一级网站 | 天天干天天爽 | 国产大片aaa | 国产69视频在线观看 | 亚洲巨乳 | 免费拍拍拍网站 | 激情婷婷综合 | 成人欧美一级特黄 | 中国性老太hd大全69 | 欧洲美女毛片 | 日韩欧美www | 亚洲国产综合一区 | 精品国产AV色欲天媒传媒 | 国际av在线 | 精品自拍第一页 | 日日摸日日添日日躁av | 91精品一区二区三区综合在线爱 | 毛片大全在线观看 | 国产丝袜一区二区三区 | 国产69精品久久久久久 | 国产欧美视频一区 | www.青青草.com | 特大黑人巨人吊xxxx | 1区2区3区在线观看 久久久久久久久久久影院 成人网址在线观看 | 性欧美18一19性猛交 | www日本黄色 | av一区二区在线播放 | 美女三级黄色片 | 中文字幕一级 | 午夜小视频在线播放 | 国产99久一区二区三区a片 | 干综合网 | 国产午夜精品久久久 | аⅴ天堂中文在线网 | 原创真实夫妻啪啪av | 女女h百合无遮羞羞漫画软件 | 国产人人看 | www日本com| 青春草视频在线免费观看 | 极品91尤物被啪到呻吟喷水 | 一级黄色av片 | 国产伦精品一区二区三区视频痴汉 | 夏目彩春娇喘呻吟高潮迭起 | 午夜三级视频 | 欧美老肥婆性猛交视频 | 成人精品在线视频 | 国产av无码专区亚洲精品 | 欧美一区在线视频 | 日韩色资源 | 在线二区 | 亚洲第一天堂 | 欧洲av片| 久久久国产高清 | 一区二区三区视频免费 | 青青草原在线免费 | 免费无遮挡无码永久在线观看视频 | 青青五月天 | 67194在线免费观看 | 日本精品中文字幕 | 看a网站 | 一本色道综合久久欧美日韩精品 | 五月天堂网 | 91精品国产亚洲 | 国产精品一区二区久久毛片 | 97国产在线视频 | 中文字幕乱码中文乱码777 | 亚洲激情二区 | 欧美色xxxxx| 夜夜爽日日澡人人添 | 在线草 | 天天干天天爽天天射 | 久久在线视频精品 | 欧美丰满艳妇bbwbbw | 少妇一级淫片免费视频 | 在线视频一区二区三区 | av官网在线 | av国产网站 | 国内9l自拍 | 国产亚洲综合精品 | 亚洲精品大全 | 国产精品久久久久久久久久妞妞 |