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

Reactive-MongoDB異步Java Driver解讀

大數(shù)據(jù) MongoDB
從3.0 版本開始,MongoDB 開始提供異步方式的驅(qū)動(Java Async Driver),這為應(yīng)用提供了一種更高性能的選擇。

[[342496]]

 一、關(guān)于 異步驅(qū)動

從3.0 版本開始,MongoDB 開始提供異步方式的驅(qū)動(Java Async Driver),這為應(yīng)用提供了一種更高性能的選擇。

但實質(zhì)上,使用同步驅(qū)動(Java Sync Driver)的項目也不在少數(shù),或許是因為先入為主的原因(同步Driver的文檔說明更加的完善),又或者是為了兼容舊的 MongoDB 版本。

無論如何,由于 Reactive 的發(fā)展,未來使用異步驅(qū)動應(yīng)該是一個趨勢。

在使用 Async Driver 之前,需要對 Reactive 的概念有一些熟悉。

二、理解 Reactive (響應(yīng)式)

響應(yīng)式(Reactive)是一種異步的、面向數(shù)據(jù)流的開發(fā)方式,最早是來自于.NET 平臺上的 Reactive Extensions 庫,隨后被擴展為各種編程語言的實現(xiàn)。

在著名的 Reactive Manifesto(響應(yīng)式宣言) 中,對 Reactive 定義了四個特征:

  • 及時響應(yīng)(Responsive):系統(tǒng)能及時的響應(yīng)請求。
  •  
  • 有韌性(Resilient):系統(tǒng)在出現(xiàn)異常時仍然可以響應(yīng),即支持容錯。
  • 有彈性(Elastic):在不同的負載下,系統(tǒng)可彈性伸縮來保證運行。
  • 消息驅(qū)動(Message Driven):不同組件之間使用異步消息傳遞來進行交互,并確保松耦合及相互隔離。

在響應(yīng)式宣言的所定義的這些系統(tǒng)特征中,無一不與響應(yīng)式的流有若干的關(guān)系,于是乎就有了 2013年發(fā)起的 響應(yīng)式流規(guī)范(Reactive Stream Specification)。

https://www.reactive-streams.org/

其中,對于響應(yīng)式流的處理環(huán)節(jié)又做了如下定義:

  • 具有處理無限數(shù)量的元素的能力,即允許流永不結(jié)束
  • 按序處理
  • 異步地傳遞元素
  • 實現(xiàn)非阻塞的負壓(back-pressure)

Java 平臺則是在 JDK 9 版本上發(fā)布了對 Reactive Streams 的支持。

下面介紹響應(yīng)式流的幾個關(guān)鍵接口:

  • Publisher

Publisher 是數(shù)據(jù)的發(fā)布者。Publisher 接口只有一個方法 subscribe,用于添加數(shù)據(jù)的訂閱者,也就是 Subscriber。

  • Subscriber

Subscriber 是數(shù)據(jù)的訂閱者。Subscriber 接口有4個方法,都是作為不同事件的處理器。在訂閱者成功訂閱到發(fā)布者之后,其 onSubscribe(Subscription s) 方法會被調(diào)用。

Subscription 表示的是當前的訂閱關(guān)系。

當訂閱成功后,可以使用 Subscription 的 request(long n) 方法來請求發(fā)布者發(fā)布 n 條數(shù)據(jù)。發(fā)布者可能產(chǎn)生3種不同的消息通知,分別對應(yīng) Subscriber 的另外3個回調(diào)方法。

數(shù)據(jù)通知:對應(yīng) onNext 方法,表示發(fā)布者產(chǎn)生的數(shù)據(jù)。

錯誤通知:對應(yīng) onError 方法,表示發(fā)布者產(chǎn)生了錯誤。

結(jié)束通知:對應(yīng) onComplete 方法,表示發(fā)布者已經(jīng)完成了所有數(shù)據(jù)的發(fā)布。

在上述3種通知中,錯誤通知和結(jié)束通知都是終結(jié)通知,也就是在終結(jié)通知之后,不會再有其他通知產(chǎn)生。

  • Subscription

Subscription 表示的是一個訂閱關(guān)系。除了之前提到的 request 方法之外,還有 cancel 方法用來取消訂閱。需要注意的是,在 cancel 方法調(diào)用之后,發(fā)布者仍然有可能繼續(xù)發(fā)布通知。但訂閱最終會被取消。

這幾個接口的關(guān)系如下圖所示:

圖片出處:http://wiki.jikexueyuan.com/index.php/project/reactor-2.0/05.html

 

MongoDB 的異步驅(qū)動為 mongo-java-driver-reactivestreams 組件,其實現(xiàn)了 Reactive Stream 的上述接口。

> 除了 reactivestream 之外,MongoDB 的異步驅(qū)動還包含 RxJava 等風格的版本,有興趣的讀者可以進一步了解

http://mongodb.github.io/mongo-java-driver-reactivestreams/1.11/getting-started/quick-tour-primer/

三、使用示例

接下來,通過一個簡單的例子來演示一下 Reactive 方式的代碼風格:

A. 引入依賴

  1. org.mongodb 
  2.    mongodb-driver-reactivestreams 
  3.    1.11.0 

> 引入mongodb-driver-reactivestreams 將會自動添加 reactive-streams, bson, mongodb-driver-async組件

B. 連接數(shù)據(jù)庫

  1. //服務(wù)器實例表List servers =newArrayList(); 
  2. servers.add(newServerAddress("localhost",27018));//配置構(gòu)建器MongoClientSettings.Builder settingsBuilder =MongoClientSettings.builder();//傳入服務(wù)器實例 
  3. settingsBuilder.applyToClusterSettings( 
  4.         builder -> builder.hosts(servers));//構(gòu)建 Client 實例MongoClient mongoClient =MongoClients.create(settingsBuilder.build()); 

C. 實現(xiàn)文檔查詢

  1. //獲得數(shù)據(jù)庫對象MongoDatabase database = client.getDatabase(databaseName);//獲得集合MongoCollection collection = database.getCollection(collectionName);//異步返回PublisherFindPublisher publisher = collection.find();//訂閱實現(xiàn) 
  2. publisher.subscribe(newSubscriber(){ 
  3.     @Override 
  4.     publicvoid onSubscribe(Subscription s){ 
  5.         System.out.println("start..."); 
  6.         //執(zhí)行請求 
  7.         s.request(Integer.MAX_VALUE); 
  8.  
  9.     } 
  10.     @Override 
  11.     publicvoid onNext(Document document){ 
  12.         //獲得文檔 
  13.         System.out.println("Document:"+ document.toJson()); 
  14.     } 
  15.  
  16.     @Override 
  17.     publicvoid onError(Throwable t){ 
  18.         System.out.println("error occurs."); 
  19.     } 
  20.  
  21.     @Override 
  22.     publicvoid onComplete(){ 
  23.         System.out.println("finished."); 
  24.     }}); 

注意到,與使用同步驅(qū)動不同的是,collection.find()方法返回的不是 Cursor,而是一個 FindPublisher對象,這是Publisher接口的一層擴展。

而且,在返回 Publisher 對象時,此時并沒有產(chǎn)生真正的數(shù)據(jù)庫IO請求。真正發(fā)起請求需要通過調(diào)用 Subscription.request()方法。

在上面的代碼中,為了讀取由 Publisher 產(chǎn)生的結(jié)果,通過自定義一個Subscriber,在onSubscribe 事件觸發(fā)時就執(zhí)行 數(shù)據(jù)庫的請求,之后分別對 onNext、onError、onComplete進行處理。

盡管這種實現(xiàn)方式是純異步的,但在使用上比較繁瑣。試想如果對于每個數(shù)據(jù)庫操作都要完成一個Subscriber 邏輯,那么開發(fā)的工作量是巨大的。

為了盡可能復(fù)用重復(fù)的邏輯,可以對Subscriber的邏輯做一層封裝,包含如下功能:

  • 使用 List 容器對請求結(jié)果進行緩存
  • 實現(xiàn)阻塞等待結(jié)果的方法,可指定超時時間
  • 捕獲異常,在等待結(jié)果時拋出

代碼如下:

  1. publicclassObservableSubscriberimplementsSubscriber{ 
  2.  
  3.     //響應(yīng)數(shù)據(jù) 
  4.     privatefinalList received; 
  5.     //錯誤信息 
  6.     privatefinalList errors; 
  7.     //等待對象 
  8.     privatefinalCountDownLatch latch; 
  9.     //訂閱器 
  10.     privatevolatileSubscription subscription; 
  11.     //是否完成 
  12.     privatevolatileboolean completed; 
  13.  
  14.     publicObservableSubscriber(){ 
  15.         this.received =newArrayList(); 
  16.         this.errors =newArrayList(); 
  17.         this.latch =newCountDownLatch(1); 
  18.     } 
  19.  
  20.     @Override 
  21.     publicvoid onSubscribe(finalSubscription s){ 
  22.         subscription = s; 
  23.     } 
  24.  
  25.     @Override 
  26.     publicvoid onNext(final T t){ 
  27.         received.add(t); 
  28.     } 
  29.  
  30.     @Override 
  31.     publicvoid onError(finalThrowable t){ 
  32.         errors.add(t); 
  33.         onComplete(); 
  34.     } 
  35.  
  36.     @Override 
  37.     publicvoid onComplete(){ 
  38.         completed =true
  39.         latch.countDown(); 
  40.     } 
  41.  
  42.     publicSubscription getSubscription(){ 
  43.         return subscription; 
  44.     } 
  45.  
  46.     publicList getReceived(){ 
  47.         return received; 
  48.     } 
  49.  
  50.     publicThrowable getError(){ 
  51.         if(errors.size()>0){ 
  52.             return errors.get(0); 
  53.         } 
  54.         returnnull; 
  55.     } 
  56.  
  57.     publicboolean isCompleted(){ 
  58.         return completed; 
  59.     } 
  60.  
  61.     /** 
  62.      * 阻塞一定時間等待結(jié)果 
  63.      * 
  64.      * @param timeout 
  65.      * @param unit 
  66.      * @return 
  67.      * @throws Throwable 
  68.      */ 
  69.     publicListget(finallong timeout,finalTimeUnit unit)throwsThrowable{ 
  70.         return await(timeout, unit).getReceived(); 
  71.     } 
  72.  
  73.     /** 
  74.      * 一直阻塞等待請求完成 
  75.      * 
  76.      * @return 
  77.      * @throws Throwable 
  78.      */ 
  79.     publicObservableSubscriber await()throwsThrowable{ 
  80.         return await(Long.MAX_VALUE,TimeUnit.MILLISECONDS); 
  81.     } 
  82.  
  83.     /** 
  84.      * 阻塞一定時間等待完成 
  85.      * 
  86.      * @param timeout 
  87.      * @param unit 
  88.      * @return 
  89.      * @throws Throwable 
  90.      */ 
  91.     publicObservableSubscriber await(finallong timeout,finalTimeUnit unit)throwsThrowable{ 
  92.         subscription.request(Integer.MAX_VALUE); 
  93.         if(!latch.await(timeout, unit)){ 
  94.             thrownewMongoTimeoutException("Publisher onComplete timed out"); 
  95.         } 
  96.         if(!errors.isEmpty()){ 
  97.             throw errors.get(0); 
  98.         } 
  99.         returnthis; 
  100.     }} 

借助這個基礎(chǔ)的工具類,我們對于文檔的異步操作就變得簡單多了。

比如對于文檔查詢的操作可以改造如下:

  1. ObservableSubscriber subscriber =newObservableSubscriber(); 
  2. collection.find().subscribe(subscriber);//結(jié)果處理 
  3. subscriber.get(15,TimeUnit.SECONDS).forEach( d ->{ 
  4.     System.out.println("Document:"+ d.toJson());}); 

當然,這個例子還有可以繼續(xù)完善,比如使用 List 作為緩存,則要考慮數(shù)據(jù)量的問題,避免將全部(或超量) 的文檔一次性轉(zhuǎn)入內(nèi)存。

作者:唐卓章

華為技術(shù)專家,多年互聯(lián)網(wǎng)研發(fā)/架設(shè)經(jīng)驗,關(guān)注NOSQL 中間件高可用及彈性擴展,在分布式系統(tǒng)架構(gòu)性能優(yōu)化方面有豐富的實踐經(jīng)驗,目前從事物聯(lián)網(wǎng)平臺研發(fā)工作,致力于打造大容量高可用的物聯(lián)網(wǎng)服務(wù)。

本文轉(zhuǎn)載自微信公眾號「 Mongoing中文社區(qū)」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系 Mongoing中文社區(qū)公眾號。

 

責任編輯:武曉燕 來源: Mongoing中文社區(qū)
相關(guān)推薦

2012-06-17 13:26:07

MongoDBJava

2020-05-29 07:20:00

Java8異步編程源碼解讀

2012-03-31 10:59:02

ASP.NET

2020-05-21 09:33:06

Reactive編程模型

2018-08-19 09:15:25

MongoDBGo 微服務(wù)

2024-05-06 00:00:00

RefReactive性能

2009-12-10 09:37:31

Linuxdriver編寫思考

2015-06-15 10:32:44

Java核心源碼解讀

2020-07-07 07:00:00

Spring WebFREST APIReactive AP

2009-09-10 14:18:59

Functional F#

2009-11-09 09:56:46

Driver Stud

2011-12-21 10:46:17

Java

2024-07-29 00:01:00

2011-12-14 10:31:43

2012-03-26 10:14:25

JavaJava 8

2023-03-27 10:46:53

SourceMap字符串代碼

2023-09-28 08:41:11

OpenAILLMLangChain

2021-03-22 08:45:30

異步編程Java

2011-12-13 17:31:07

2021-08-02 11:13:28

人工智能機器學習技術(shù)
點贊
收藏

51CTO技術(shù)棧公眾號

三级资源在线| 性中国xxx极品hd| 外国成人免费视频| 精品国产91乱码一区二区三区 | 天堂网www中文在线| 国产精品资源| 久久精品国产一区| 一区二区视频观看| 电影中文字幕一区二区| 精品久久久视频| 美女在线免费视频| 视频福利在线| 国产精品911| 国产成人综合精品| 精品97人妻无码中文永久在线 | 国产精品99久久久久久宅男| 77777少妇光屁股久久一区| 欧美福利第一页| 成人精品毛片| 7777女厕盗摄久久久| 日韩欧美国产综合在线| 欧美18一19xxx性| 久久综合九色综合97婷婷| 91久久久国产精品| 无码人妻av免费一区二区三区| 欧美96在线丨欧| 在线视频一区二区| 69亚洲乱人伦| 久久久久毛片免费观看| 色婷婷亚洲综合| 老太脱裤子让老头玩xxxxx| 欧美激情午夜| 日本一区二区三区四区| 国外成人在线视频网站| 国产精品探花视频| 麻豆精品在线播放| 日韩av大片在线| 国产 日韩 欧美 在线| 欧美片第1页综合| 久久精品国产电影| 日韩av片在线| 日本黄色精品| 亚洲日本aⅴ片在线观看香蕉| 一级黄色电影片| 日韩一区二区三区精品视频第3页| 欧美日韩免费一区二区三区视频| wwwxxx黄色片| 欧美羞羞视频| 日韩欧美在线免费观看| 97国产精东麻豆人妻电影| 菠萝蜜视频在线观看www入口| 亚洲六月丁香色婷婷综合久久| 亚洲最大免费| 欧美69xxxx| 亚洲欧美成人一区二区三区| 99亚洲精品视频| 国产原创在线观看| 亚洲欧美另类在线| 欧美日韩dvd| 青青青国内视频在线观看软件| 亚洲男人的天堂网| 最近免费观看高清韩国日本大全| 国产午夜精品久久久久免费视| 亚洲人123区| 日产精品久久久久久久蜜臀| 亚洲男同gay网站| 亚洲一线二线三线视频| 99在线观看视频免费| 9999在线视频| 日韩欧美999| 欧美日韩一区二区不卡| 国产日韩综合一区二区性色av| 无码人妻精品一区二区50| 午夜一区不卡| 国产精品18久久久久久首页狼| 99re国产在线| 日本成人在线一区| 亚洲韩国欧洲国产日产av| 精品久久sese| 天天操天天插天天射| av网站一区二区三区| 91精品影视| 五月天丁香久久| 美女日批免费视频| 一区二区三区免费播放| av中文资源在线资源免费观看| 亚洲午夜影视影院在线观看| 欧美一级欧美一级| 三上悠亚一区二区| 欧美人动与zoxxxx乱| 国产chinesehd精品露脸| 黄色a在线观看| 精品91在线| 91精品91久久久久久| 日韩手机在线视频| 亚洲精品国产精品乱码视色| 老牛影视一区二区三区| 国产精品自拍视频| 国产丰满果冻videossex| 不卡的av在线| 亚洲女人毛片| 都市激情国产精品| 中中文字幕av在线| 久久99九九99精品| 99精品99久久久久久宅男| 少妇av在线播放| 欧美激情在线一区二区| 亚洲小视频在线播放| 亚洲第一av| 亚洲精品中文字幕乱码三区不卡| 亚洲AV午夜精品| 91污在线观看| 国产成人精品免费看在线播放| 免费看电影在线| 欧美在线综合视频| av电影在线播放| 日韩亚洲一区在线| 午夜精品一区二区在线观看 | 视频一区在线观看| 日本中文字幕一区二区有限公司| 亚洲专区中文字幕| 国产福利第一视频在线播放| 亚洲自拍偷拍图区| 香蕉视频999| 国产日产精品一区二区三区四区的观看方式 | 日本欧美在线视频免费观看| 精品福利免费观看| 成年人性生活视频| 97精品国产| 国产精品久久久久久av下载红粉| 18禁男女爽爽爽午夜网站免费| 欧美熟妇激情一区二区三区| 欧美一区成人| 国产色视频一区| 国产精品一区二区婷婷| 欧美日韩性视频在线| 乱码一区二区三区| 欧美一区精品| 91精品一区二区| 精品国产99久久久久久| 欧美日韩在线三区| 日本欧美一区二区三区不卡视频| 噜噜噜躁狠狠躁狠狠精品视频| 国产精品乱子乱xxxx| 先锋成人av| 欧美一二三四区在线| 糖心vlog免费在线观看| 日本中文字幕一区二区视频| 欧美一区二区三区在线播放| 欧洲一级精品| 在线看日韩欧美| 一级黄色录像大片| 亚洲欧洲另类国产综合| 欧美大片久久久| caoporn成人免费视频在线| 日本免费在线视频| 欧美日韩国产专区| 你懂的在线观看网站| 韩日视频一区| 成人免费91在线看| 秋霞在线视频| 亚洲国产精品热久久| 欧美成人aaaaⅴ片在线看| 成人爽a毛片一区二区免费| 久久久99精品视频| 亚洲一区电影| 国内精品一区二区三区四区| 五月天激情开心网| 精品久久久久久久久国产字幕| 久久人妻一区二区| 久久av在线| 亚洲国产精品久久久久久女王| 另类一区二区三区| 久久午夜a级毛片| 亚洲av无码片一区二区三区 | 成人超碰在线| 亚洲精品久久久久久久久| 亚洲伊人成人网| 国产精品天美传媒沈樵| 污视频在线观看免费网站| 亚洲国产免费看| 日韩av电影免费在线观看| 先锋影音网一区二区| 欧美激情网友自拍| 欧美色图另类| 欧美一区二区三区影视| 日韩免费一级片| 国产精品天干天干在观线| 人妻巨大乳一二三区| 性高湖久久久久久久久| 一区二区三区四区在线视频 | 日本欧美一区二区在线观看| 超碰在线免费观看97| 欧美精品中文字幕亚洲专区| 国产精品美女呻吟| 美足av综合网| 中文字幕日韩专区| 欧美亚洲精品在线观看| 欧美日韩中文字幕一区| 久久久精品人妻一区二区三区四 | 日韩久久精品一区二区三区| 狂野欧美xxxx韩国少妇| 欧美一区第一页| www在线视频| 国产一区二区久久精品| 高清毛片aaaaaaaaa片| 欧美手机在线视频| 国产尤物在线视频| 一区二区激情视频| 在线观看免费黄色网址| av在线一区二区三区| 99九九精品视频| 久久精品系列| 少妇人妻大乳在线视频| 久久一本综合| 日本不卡一区| 视频小说一区二区| 成人欧美一区二区| 国产精品亚洲一区二区在线观看| 日韩av免费网站| segui88久久综合9999| 超碰91人人草人人干| 都市激情在线视频| 精品亚洲永久免费精品 | 日韩精品极品视频免费观看| 国产肥老妇视频| 在线成人免费视频| 自拍偷拍精品视频| 日韩欧美在线一区| 自拍偷拍欧美亚洲| 亚洲一卡二卡三卡四卡无卡久久| 99自拍偷拍视频| 国产清纯在线一区二区www| 中文文字幕文字幕高清| 成人在线综合网站| 亚洲综合资源| 亚洲欧美日韩精品久久久久| 精品中文字幕在线播放| 国产精品一区在线| www.51色.com| 精品亚洲欧美一区| 成人亚洲精品777777大片| 亚洲综合不卡| 浮妇高潮喷白浆视频| 亚洲一级电影| 霍思燕三级露全乳照| 亚洲视频免费| 又大又硬又爽免费视频| 欧美日韩视频| www.国产亚洲| 亚洲国产专区| 狠狠干 狠狠操| 99热免费精品在线观看| 国产一区二区三区小说| 国产精品magnet| 人人干视频在线| 亚洲女人av| 亚洲色精品三区二区一区| 久久亚洲影院| 日本免费观看网站| 久久国产精品72免费观看| aaa一级黄色片| 国产成人精品免费网站| 逼特逼视频在线观看| av一区二区三区| 醉酒壮男gay强迫野外xx| 久久久不卡网国产精品一区| x88av在线| 中文字幕永久在线不卡| 男女性高潮免费网站| 亚洲夂夂婷婷色拍ww47| 国产成人免费看| 欧美色手机在线观看| 国产精品久久久久久久久久久久久久久久久久 | 欧美中文字幕在线观看视频| 99av国产精品欲麻豆| 亚洲国产精品毛片av不卡在线| 免费成人性网站| 亚洲最大视频网| 久久欧美中文字幕| 一区二区三区在线播放视频| 亚洲一区二区三区四区五区黄| www.av麻豆| 欧美无砖砖区免费| 精品国产va久久久久久久| 日韩福利视频在线观看| 91社区在线高清| 久久久久久久久国产精品| 欧美日韩美女| 91嫩草免费看| 国产精品欧美三级在线观看| 大桥未久一区二区三区| 亚洲一区二区三区高清| 不卡的在线视频| 久久综合一区二区| 99久久婷婷国产综合| 欧美日韩国产丝袜另类| 国产伦理一区二区| 亚洲石原莉奈一区二区在线观看| av在线网址观看| 日本三级久久久| 91蝌蚪精品视频| 偷拍视频一区二区| 亚洲精品国产日韩| 日韩高清在线一区二区| 国产婷婷色一区二区三区四区| 青娱乐av在线| 欧美天堂亚洲电影院在线播放| 丰满人妻av一区二区三区| 这里只有精品久久| 无遮挡在线观看| y111111国产精品久久婷婷| 国产成人精品免费视| 成人免费a级片| 精品亚洲porn| 日本少妇xxxxx| 欧美午夜女人视频在线| 国产黄色片网站| 日韩一区二区av| 影视一区二区三区| 国产在线播放一区二区| 中文乱码免费一区二区三区下载| 中文字幕欧美人妻精品一区| 不卡影院免费观看| 久久久精品99| 日韩欧美美女一区二区三区| 三区四区在线视频| 国产精品高潮呻吟久久av无限 | 国产精品变态另类虐交| 欧美日韩精品一二三区| 国产中文字幕在线看| 欧美亚洲一级片| 免费日韩一区二区三区| 妞干网视频在线观看| 国产白丝网站精品污在线入口| 精品无码一区二区三区蜜臀| 欧美日韩一区小说| 韩国三级在线观看久| 国产91精品在线播放| 亚洲成在人线免费观看| 免费看日本毛片| 91在线云播放| 国产精品国产三级国产专区52| 亚洲精品98久久久久久中文字幕| 丁香花电影在线观看完整版| 国产91视觉| 亚洲精品色图| 五月开心播播网| 欧美视频在线免费| 你懂得在线网址| 日韩暖暖在线视频| 青青草成人影院| 亚洲高清在线不卡| 亚洲欧美精品午睡沙发| 国产白浆在线观看| 欧美激情奇米色| 牛牛影视久久网| 国产精品亚洲αv天堂无码| 久久伊99综合婷婷久久伊| 日韩欧美在线观看免费| 在线电影av不卡网址| 欧美天堂在线| 日本丰满少妇黄大片在线观看| 国产寡妇亲子伦一区二区| 久操免费在线视频| 亚洲高清色综合| 亚洲精品在线影院| 一区二区三区四区国产| 国产盗摄女厕一区二区三区| 国产精品第56页| 亚洲欧美日韩中文视频| 成人在线高清| 日韩a级黄色片| xfplay精品久久| 在线播放一级片| 色综合久久久888| 美女亚洲一区| 红桃视频 国产| 性欧美疯狂xxxxbbbb| 邻家有女韩剧在线观看国语| 成人精品一区二区三区| 欧美婷婷在线| 一级片视频免费看| 91精品欧美综合在线观看最新| 91九色美女在线视频| 日本午夜精品电影| 国产老肥熟一区二区三区| 国产农村妇女aaaaa视频| 色妞在线综合亚洲欧美| 凹凸av导航大全精品| 日本新janpanese乱熟| 亚洲日本电影在线| 日韩有码电影| 91免费版黄色| 蜜臀av性久久久久蜜臀aⅴ四虎| 精品在线视频观看| 中文字幕在线日韩| 美女视频免费精品| 天堂在线中文在线| 色婷婷综合视频在线观看|