精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

讓人頭痛的大事務問題到底要如何解決?

開發 項目管理
正好前段時間我在公司處理過這個問題,我們當時由于項目初期時間比較緊張,為了快速完成業務功能,忽略了系統部分性能問題。

[[354795]]

本文轉載自微信公眾號「蘇三說技術」,作者因為熱愛所以堅持ing。轉載本文請聯系蘇三說技術公眾號。   

前言

最近有個網友問了我一個問題:系統中大事務問題要如何處理?

正好前段時間我在公司處理過這個問題,我們當時由于項目初期時間比較緊張,為了快速完成業務功能,忽略了系統部分性能問題。項目順利上線后,專門抽了一個迭代的時間去解決大事務問題,目前已經優化完成,并且順利上線。現給大家總結了一下,我們當時使用的一些解決辦法,以便大家被相同問題困擾時,可以參考一下。

大事務引發的問題

在分享解決辦法之前,先看看系統中如果出現大事務可能會引發哪些問題

 

從上圖可以看出如果系統中出現大事務時,問題還不小,所以我們在實際項目開發中應該盡量避免大事務的情況。如果我們已有系統中存在大事務問題,該如何解決呢?

解決辦法

少用@Transactional注解

大家在實際項目開發中,我們在業務方法加上@Transactional注解開啟事務功能,這是非常普遍的做法,它被稱為聲明式事務。

部分代碼如下:

  1. @Transactional(rollbackFor=Exception.class) 
  2.   public void save(User user) { 
  3.         doSameThing... 
  4.   } 

然而,我要說的第一條是:少用@Transactional注解。

為什么?

  1. 我們知道@Transactional注解是通過spring的aop起作用的,但是如果使用不當,事務功能可能會失效。如果恰巧你經驗不足,這種問題不太好排查。至于事務哪些情況下會失效,可以參考我之前寫的《spring事務的這10種坑,你稍不注意可能就會踩中!!!》這篇文章。
  2. @Transactional注解一般加在某個業務方法上,會導致整個業務方法都在同一個事務中,粒度太粗,不好控制事務范圍,是出現大事務問題的最常見的原因。

那我們該怎么辦呢?

可以使用編程式事務,在spring項目中使用TransactionTemplate類的對象,手動執行事務。

部分代碼如下:

  1. @Autowired 
  2.    private TransactionTemplate transactionTemplate; 
  3.     
  4.    ... 
  5.     
  6.    public void save(final User user) { 
  7.          transactionTemplate.execute((status) => { 
  8.             doSameThing... 
  9.             return Boolean.TRUE
  10.          }) 
  11.    } 

從上面的代碼中可以看出,使用TransactionTemplate的編程式事務功能自己靈活控制事務的范圍,是避免大事務問題的首選辦法。

當然,我說少使用@Transactional注解開啟事務,并不是說一定不能用它,如果項目中有些業務邏輯比較簡單,而且不經常變動,使用@Transactional注解開啟事務開啟事務也無妨,因為它更簡單,開發效率更高,但是千萬要小心事務失效的問題。

將查詢(select)方法放到事務外

如果出現大事務,可以將查詢(select)方法放到事務外,也是比較常用的做法,因為一般情況下這類方法是不需要事務的。

比如出現如下代碼:

  1. @Transactional(rollbackFor=Exception.class) 
  2.    public void save(User user) { 
  3.          queryData1(); 
  4.          queryData2(); 
  5.          addData1(); 
  6.          updateData2(); 
  7.    } 

可以將queryData1和queryData2兩個查詢方法放在事務外執行,將真正需要事務執行的代碼才放到事務中,比如:addData1和updateData2方法,這樣就能有效的減少事務的粒度。

如果使用TransactionTemplate的編程式事務這里就非常好修改。

  1. @Autowired 
  2.    private TransactionTemplate transactionTemplate; 
  3.     
  4.    ... 
  5.     
  6.    public void save(final User user) { 
  7.          queryData1(); 
  8.          queryData2(); 
  9.          transactionTemplate.execute((status) => { 
  10.             addData1(); 
  11.             updateData2(); 
  12.             return Boolean.TRUE
  13.          }) 
  14.    } 

但是如果你實在還是想用@Transactional注解,該怎么拆分呢?

  1. public void save(User user) { 
  2.          queryData1(); 
  3.          queryData2(); 
  4.          doSave(); 
  5.     } 
  6.     
  7.     @Transactional(rollbackFor=Exception.class) 
  8.     public void doSave(User user) { 
  9.        addData1(); 
  10.        updateData2(); 
  11.     } 

這個例子是非常經典的錯誤,這種直接方法調用的做法事務不會生效,給正在坑中的朋友提個醒。因為@Transactional注解的聲明式事務是通過spring aop起作用的,而spring aop需要生成代理對象,直接方法調用使用的還是原始對象,所以事務不會生效。

有沒有辦法解決這個問題呢?

1.新加一個Service方法

這個方法非常簡單,只需要新加一個Service方法,把@Transactional注解加到新Service方法上,把需要事務執行的代碼移到新方法中。具體代碼如下:

  1. @Servcie 
  2.   public class ServiceA { 
  3.      @Autowired 
  4.      prvate ServiceB serviceB; 
  5.    
  6.      public void save(User user) { 
  7.            queryData1(); 
  8.            queryData2(); 
  9.            serviceB.doSave(user); 
  10.      } 
  11.    } 
  12.     
  13.    @Servcie 
  14.    public class ServiceB { 
  15.     
  16.       @Transactional(rollbackFor=Exception.class) 
  17.       public void doSave(User user) { 
  18.          addData1(); 
  19.          updateData2(); 
  20.       } 
  21.     
  22.    } 

2.在該Service類中注入自己

如果不想再新加一個Service類,在該Service類中注入自己也是一種選擇。具體代碼如下:

  1. @Servcie 
  2.   public class ServiceA { 
  3.      @Autowired 
  4.      prvate ServiceA serviceA; 
  5.    
  6.      public void save(User user) { 
  7.            queryData1(); 
  8.            queryData2(); 
  9.            serviceA.doSave(user); 
  10.      } 
  11.       
  12.      @Transactional(rollbackFor=Exception.class) 
  13.      public void doSave(User user) { 
  14.          addData1(); 
  15.          updateData2(); 
  16.       } 
  17.    } 

可能有些人可能會有這樣的疑問:這種做法會不會出現循環依賴問題?

其實spring ioc內部的三級緩存保證了它,不會出現循環依賴問題。如果你想進一步了解循環依賴問題,可以看看我之前文章《spring解決循環依賴為什么要用三級緩存?》。

3.在該Service類中使用AopContext.currentProxy()獲取代理對象

上面的方法2確實可以解決問題,但是代碼看起來并不直觀,還可以通過在該Service類中使用AOPProxy獲取代理對象,實現相同的功能。具體代碼如下:

  1. @Servcie 
  2.   public class ServiceA { 
  3.    
  4.      public void save(User user) { 
  5.            queryData1(); 
  6.            queryData2(); 
  7.            ((ServiceA)AopContext.currentProxy()).doSave(user); 
  8.      } 
  9.       
  10.      @Transactional(rollbackFor=Exception.class) 
  11.      public void doSave(User user) { 
  12.          addData1(); 
  13.          updateData2(); 
  14.       } 
  15.    } 

事務中避免遠程調用

我們在接口中調用其他系統的接口是不能避免的,由于網絡不穩定,這種遠程調的響應時間可能比較長,如果遠程調用的代碼放在某個事物中,這個事物就可能是大事務。當然,遠程調用不僅僅是指調用接口,還有包括:發MQ消息,或者連接redis、mongodb保存數據等。

  1. @Transactional(rollbackFor=Exception.class) 
  2.    public void save(User user) { 
  3.          callRemoteApi(); 
  4.          addData1(); 
  5.    } 

遠程調用的代碼可能耗時較長,切記一定要放在事務之外。

  1. @Autowired 
  2.    private TransactionTemplate transactionTemplate; 
  3.     
  4.    ... 
  5.     
  6.    public void save(final User user) { 
  7.          callRemoteApi(); 
  8.          transactionTemplate.execute((status) => { 
  9.             addData1(); 
  10.             return Boolean.TRUE
  11.          }) 
  12.    } 

有些朋友可能會問,遠程調用的代碼不放在事務中如何保證數據一致性呢?這就需要建立:重試+補償機制,達到數據最終一致性了。

事務中避免一次性處理太多數據

如果一個事務中需要處理的數據太多,也會造成大事務問題。比如為了操作方便,你可能會一次批量更新1000條數據,這樣會導致大量數據鎖等待,特別在高并發的系統中問題尤為明顯。

解決辦法是分頁處理,1000條數據,分50頁,一次只處理20條數據,這樣可以大大減少大事務的出現。

非事務執行

在使用事務之前,我們都應該思考一下,是不是所有的數據庫操作都需要在事務中執行?

  1. @Autowired 
  2.    private TransactionTemplate transactionTemplate; 
  3.     
  4.    ... 
  5.     
  6.    public void save(final User user) { 
  7.          transactionTemplate.execute((status) => { 
  8.             addData(); 
  9.             addLog(); 
  10.             updateCount(); 
  11.             return Boolean.TRUE
  12.          }) 
  13.    } 

上面的例子中,其實addLog增加操作日志方法 和 updateCount更新統計數量方法,是可以不在事務中執行的,因為操作日志和統計數量這種業務允許少量數據不一致的情況。

  1. @Autowired 
  2.    private TransactionTemplate transactionTemplate; 
  3.     
  4.    ... 
  5.     
  6.    public void save(final User user) { 
  7.          transactionTemplate.execute((status) => { 
  8.             addData();            
  9.             return Boolean.TRUE
  10.          }) 
  11.          addLog(); 
  12.          updateCount(); 
  13.    } 

當然大事務中要鑒別出哪些方法可以非事務執行,其實沒那么容易,需要對整個業務梳理一遍,才能找出最合理的答案。

異步處理

還有一點也非常重要,是不是事務中的所有方法都需要同步執行?我們都知道,方法同步執行需要等待方法返回,如果一個事務中同步執行的方法太多了,勢必會造成等待時間過長,出現大事務問題。

看看下面這個列子:

  1. @Autowired 
  2.    private TransactionTemplate transactionTemplate; 
  3.     
  4.    ... 
  5.     
  6.    public void save(final User user) { 
  7.          transactionTemplate.execute((status) => { 
  8.             order(); 
  9.             delivery(); 
  10.             return Boolean.TRUE
  11.          }) 
  12.    } 

order方法用于下單,delivery方法用于發貨,是不是下單后就一定要馬上發貨呢?

答案是否定的。

這里發貨功能其實可以走mq異步處理邏輯。

  1. @Autowired 
  2.    private TransactionTemplate transactionTemplate; 
  3.     
  4.    ... 
  5.     
  6.    public void save(final User user) { 
  7.          transactionTemplate.execute((status) => { 
  8.             order(); 
  9.             return Boolean.TRUE
  10.          }) 
  11.          sendMq(); 
  12.    } 

總結

本人從網友的一個問題出發,結合自己實際的工作經驗分享了處理大事務的6種辦法:

  • 少用@Transactional注解
  • 將查詢(select)方法放到事務外
  • 事務中避免遠程調用
  • 事務中避免一次性處理太多數據
  • 非事務執行
  • 異步處理
責任編輯:武曉燕 來源: 蘇三說技術
相關推薦

2012-02-14 09:59:09

NoSQLCouchDB

2023-11-28 08:00:00

SpringJava

2017-12-14 10:35:54

iOSAPPiPhone

2012-09-05 11:09:15

SELinux操作系統

2024-01-10 09:44:11

MySQL死鎖

2017-10-17 09:21:06

2010-04-29 17:46:31

Oracle死鎖

2019-11-26 14:30:20

Spring循環依賴Java

2023-07-18 16:05:00

IP地址

2024-12-05 09:06:58

2021-10-20 20:27:55

MySQL死鎖并發

2009-09-21 17:10:14

struts Hibe

2024-01-15 07:05:50

開發大事務數據庫

2014-04-10 13:55:24

2019-05-27 09:00:00

蘇寧智慧零售平臺數據庫

2010-07-16 13:52:26

telnet漏洞

2023-10-30 18:35:47

MySQL主從延時

2011-03-23 14:42:47

CPU過度消耗

2021-06-06 13:05:15

前端跨域CORS

2011-08-29 10:34:00

網絡安全云安全云計算
點贊
收藏

51CTO技術棧公眾號

在线中文一区| 91福利区在线观看| 另类欧美日韩国产在线| 精品国产区一区二区三区在线观看| 国产三级生活片| 成人不卡免费视频| 成人综合久久网| av黄在线观看| youjizz久久| 日本午夜在线亚洲.国产| 日日碰狠狠添天天爽| 性欧美hd调教| 亚洲天堂网中文字| 欧美激情精品久久久久| 香蕉视频xxx| 日韩精品专区| 午夜视频久久久久久| 在线观看成人一级片| 亚洲综合成人婷婷小说| 18精品爽视频在线观看| 91亚洲一区| 亚洲欧美日韩在线不卡| 91精品国产综合久久男男| 91动漫免费网站| 久久99精品久久久久久欧洲站| 在线免费精品视频| 国产av人人夜夜澡人人爽麻豆| 日本一区二区三区在线观看视频| 国产成人免费在线视频| 成人激情在线播放| 亚洲免费视频二区| 免费亚洲一区| 91精品国产色综合久久不卡98| 国产精品老熟女一区二区| 青青草原在线免费观看| 色婷婷激情五月| 麻豆免费看一区二区三区| 欧日韩不卡在线视频| 日韩精品乱码久久久久久| 水蜜桃久久夜色精品一区| 8x8x8国产精品| 国产精品二区在线观看| 国内精品国产成人国产三级| 国产在线视频精品一区| 欧美日韩成人在线观看| 欧美偷拍第一页| 在线观看欧美理论a影院| 国产精品美女www爽爽爽| 成人免费大片黄在线播放| 国产情侣呻吟对白高潮| 日本特黄久久久高潮| 日本欧美一级片| 69亚洲精品久久久蜜桃小说| 噜噜噜久久亚洲精品国产品小说| 欧美资源在线观看| 热久久久久久久久| 永久免费看片视频教学| 亚洲午夜免费| 日韩欧美二区三区| 成人性生交免费看| **精品中文字幕一区二区三区| 色天天综合色天天久久| 亚洲欧洲精品一区二区| 男人在线资源站| 国产免费成人在线视频| 国产精品99久久久久久久久| 男人的午夜天堂| 欧美精品91| 久久国产精品免费视频 | 香蕉成人在线视频| 国产乱码一区| 色综合婷婷久久| 91啪亚洲精品| 国产伦乱精品| 国产网友自拍视频导航网站在线观看| 亚欧在线免费观看| 91沈先生作品| 中文字幕乱码人妻无码久久| 日韩专区一卡二卡| 国产精品pans私拍| 中文字幕手机在线视频| 日本欧美久久久久免费播放网| 不卡av电影在线观看| 四虎地址8848| 欧美一站二站| 中文字幕亚洲二区| 欧美丰满艳妇bbwbbw| jvid福利在线一区二区| 啊v视频在线一区二区三区| 爱爱视频免费在线观看| 狠狠久久婷婷| 国产精品高潮视频| 国产精品久久欧美久久一区| 99国产一区二区三精品乱码| 日韩免费三级| 二区三区四区高清视频在线观看| 久久久高清一区二区三区| 国产又粗又大又爽的视频| 国产免费拔擦拔擦8x高清在线人| 欧美日韩免费不卡视频一区二区三区| 人妻精油按摩bd高清中文字幕| 国产精品igao| 污片视频在线免费观看| 亚洲乱码日产精品bd| 成年人网站免费视频| 精品久久毛片| 精品国产凹凸成av人导航| 丝袜美腿中文字幕| 99久久亚洲精品| 97精品视频在线| 999久久久久久| 国产欧美一区二区三区在线看蜜臀 | 久久 天天综合| 蜜桃91精品入口| 国产精品v欧美精品v日韩| 精人妻无码一区二区三区| 韩国精品在线观看| 久久草.com| 18在线观看的| 欧美日韩国产在线播放网站| 91玉足脚交白嫩脚丫| 国产精品传媒精东影业在线| 2019国产精品自在线拍国产不卡| 中文字幕一区二区三区四区欧美| 在线精品一区| 亚洲最大av在线| 美国一级片在线免费观看视频| 午夜视频一区在线观看| 肉丝美足丝袜一区二区三区四| 成人久久精品人妻一区二区三区| 涩涩视频在线| 亚洲一区二区av在线| 亚洲免费成人在线视频| 美女一区二区在线观看| 精品国偷自产在线视频| 在线视频精品免费| 97精品超碰一区二区三区| 国产又粗又猛又爽又黄的网站| 丝袜美腿一区| 欧美性猛交一区二区三区精品| 中文字幕在线播放一区| 欧美日韩国产一区精品一区| 96精品久久久久中文字幕| 免费av在线播放| 老汉色老汉首页av亚洲| 精品国产污网站| 26uuu成人网| 久久99精品国产| 午夜欧美性电影| 天天免费亚洲黑人免费| 欧美成人三级电影在线| 欧美国产日韩综合| 麻豆91在线播放免费| 蜜桃网站成人| 亚洲a∨精品一区二区三区导航| 欧美日韩精品综合在线| 黄色片子在线观看| 国产一区二区精品久久99| 一区高清视频| 插我舔内射18免费视频| av毛片在线免费看| 亚洲精品一区二区三区福利| 日本熟伦人妇xxxx| av在线一区二区| 亚洲一区二区三区精品视频| 久久久久毛片| 日韩精品极品视频免费观看| 1024手机在线视频| 成人av网在线| 国产911在线观看| 色婷婷成人网| 久久久久久久久91| 视频一区二区在线播放| 亚洲欧美日韩国产一区| 91精品国产综合久久精品麻豆 | 久久精品国产亚洲av无码娇色| 在线一区欧美| 麻豆精品视频| 美女100%一区| 一区二区三区亚洲| 国产aⅴ一区二区三区| 香蕉成人伊视频在线观看| 国产激情第一页| 久久久久99| 97超碰人人爱| 日韩有码中文字幕在线| 2021国产精品视频| 日韩电影在线观看完整版| 日韩欧美精品中文字幕| 午夜视频在线网站| 亚洲欧洲一区| 91精品国产91久久久久青草| 97超碰在线免费| 最近2019中文字幕大全第二页| 一级黄色片在线| 国产成人精品综合在线观看 | 免费观看日韩电影| 免费视频爱爱太爽了| 一级黄色性视频| 久久91导航| 久久久精品电影| 午夜黄色小视频| 亚洲欧美一区二区久久 | 日av在线不卡| 欧美日韩国产三区| 日韩精品一级| 国产精品自产拍在线观看中文| 久久www人成免费看片中文| 日韩欧美国产麻豆| 亚洲天堂网在线观看视频| 亚洲精品日日夜夜| 麻豆短视频在线观看| 欧美精品97| 午夜啪啪免费视频| 久久天堂久久| 国产欧美日韩91| 九九色在线视频| 日韩欧美一级二级| 国产精品自产拍| 高清国产一区二区| 亚洲美女喷白浆| 成人免费视频毛片| 亚洲色图清纯唯美| 久久国产精品视频在线观看| 99精品全国免费观看视频软件| 爱情岛论坛亚洲入口| 国产精品4hu.www| 欧美亚洲在线视频| 国产不卡人人| 久久伊人色综合| 欧美尤物美女在线| 久久免费影院| 久久成人精品视频| 天堂在线视频观看| 91精品久久久久久蜜臀| 国产精品自拍视频一区| 亚洲一区二区三区在线看| 麻豆明星ai换脸视频| 久久亚洲私人国产精品va媚药| 日本中文字幕影院| 亚洲专区一区| www..com日韩| 国产欧美日韩一区二区三区四区 | 亚洲日本va| 亚洲一区二区三区视频| 成年人午夜视频| 日本精品黄色| 国产精品高潮呻吟久久av野狼| 日韩精品专区| 国产精品美乳在线观看| 78精品国产综合久久香蕉| 国产做受69高潮| 老司机深夜福利在线观看| 欧美一级视频在线观看| aa级大片免费在线观看| 欧美精品video| 久久久久久国产精品免费无遮挡| 亚洲最新av网址| 波多野结衣在线影院| 爱福利视频一区| 免费av在线播放| 色综合久久88色综合天天看泰| missav|免费高清av在线看| 精品少妇一区二区三区视频免付费| 中文字幕精品三级久久久| 精品久久久久久亚洲精品| 亚洲国产成人精品激情在线| 91国产免费看| 国产乱淫a∨片免费视频| 日韩一级黄色大片| 国产精品久久久久久久久毛片 | 色天天综合久久久久综合片| 波多野结衣毛片| 欧美老肥妇做.爰bbww| 国产精品伦理一区| 日韩精品一区二区三区老鸭窝 | 亚洲精品二三区| 一级片视频播放| 91精品蜜臀在线一区尤物| 天堂在线观看免费视频| 中文字幕最新精品| 男人资源在线播放| 97不卡在线视频| 欧美xx视频| 国产欧美韩国高清| 久久精品九色| 日韩免费在线播放| 精品一区二区三区中文字幕 | 182午夜在线观看| 国产精品一区免费视频| 中文字幕中文在线| 99精品视频一区| 最新日韩免费视频| 午夜影院久久久| 一级特黄录像免费看| 69成人精品免费视频| 懂色av一区二区三区四区| 精品小视频在线| 性爱视频在线播放| 日韩欧美视频在线| a中文在线播放| 久久伊人色综合| 丰满岳乱妇国产精品一区| 寂寞少妇一区二区三区| 欧美午夜精品理论片| 99免费精品在线观看| 在线视频这里只有精品| 亚洲最新视频在线观看| 男人天堂视频在线| 欧美日韩亚洲另类| av免费在线不卡| 中文字幕少妇一区二区三区| 欧美一卡二卡| 国产精品黄视频| 四虎884aa成人精品最新| 成年人深夜视频| 国产一区二区三区不卡在线观看 | 三级视频在线观看| 欧美色网站导航| 五月婷婷伊人网| 欧美福利小视频| www欧美在线观看| 视频一区视频二区视频三区视频四区国产| 亚洲伦伦在线| 日韩视频第一页| 日韩电影大全网站| 麻豆精品视频| 亚洲欧美春色| 精品黑人一区二区三区观看时间| 亚洲欧洲成人av每日更新| 国产无遮挡又黄又爽又色视频| 亚洲国产精品成人精品| 蜜臀av在线| 91亚色免费| 91精品国偷自产在线电影| 国产av不卡一区二区| 久久99久久久久| 国产欧美三级电影| 电影午夜精品一区二区三区| 免费一区二区| 国产肥臀一区二区福利视频| 成人午夜视频在线观看| 国产精品视频一区二区在线观看| 欧美午夜精品久久久久久超碰| 久久精品蜜桃| 欧美亚洲国产视频| 99re8精品视频在线观看| 中文字幕一区二区三区乱码| 紧缚奴在线一区二区三区| 免费中文字幕日韩| 日韩一区二区三区在线| 四季久久免费一区二区三区四区| 91蜜桃网站免费观看| 欧美日韩久久| 久久久久亚洲AV成人无码国产| 精品日韩美女的视频高清| 五月激情六月婷婷| 日本视频久久久| 清纯唯美亚洲综合一区| www.超碰97.com| 亚洲国产精品v| 国产精品国产一区二区三区四区 | av毛片午夜不卡高**水| 精品国产乱码久久久久久88av| 午夜亚洲视频| 97人妻精品一区二区免费| 欧美日韩亚洲综合| 日本高清在线观看| 久久99精品久久久久久青青日本| 久久综合激情| 黄色一级大片在线免费观看| 精品少妇一区二区三区免费观看| 在线天堂新版最新版在线8| 色播亚洲视频在线观看| 国产一区不卡视频| 日韩伦人妻无码| 在线精品播放av| 在线精品视频一区| 欧美黄色一级片视频| 成人免费在线观看入口| 亚洲av人无码激艳猛片服务器| 久久国产精品99国产精| 亚洲理论电影| 亚洲一二三不卡| 欧美日韩国产综合新一区 | 久久亚洲影音av资源网| 国产欧美自拍一区| 黑森林精品导航| 亚洲色欲色欲www在线观看| 无码国精品一区二区免费蜜桃| 成人妇女免费播放久久久| 影音先锋中文字幕一区二区| 欧美丰满少妇人妻精品| 精品国产户外野外| a级网站在线播放| 欧美日韩系列| 久久66热偷产精品| 国产黄网在线观看| 欧美激情中文字幕在线| 欧美日韩一二|