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

分布式鎖看了又看,優(yōu)秀方案我來告訴你

開發(fā) 前端 分布式
對于商品秒殺的場景,我們需要防止庫存超賣或者重復(fù)扣款等并發(fā)問題,我們通常需要使用分布式鎖,來解決共享資源競爭導(dǎo)致數(shù)據(jù)不一致的問題。本篇就講解如何用分布式鎖的來解決此類問題。

[[392389]]

分布式鎖的場景

秒殺場景案例

對于商品秒殺的場景,我們需要防止庫存超賣或者重復(fù)扣款等并發(fā)問題,我們通常需要使用分布式鎖,來解決共享資源競爭導(dǎo)致數(shù)據(jù)不一致的問題。

以手機秒殺的場景為例子,在搶購的過程中通常我們有三個步驟:

扣掉對應(yīng)商品的庫存;2. 創(chuàng)建商品的訂單;3. 用戶支付。

對于這樣的場景我們就可以采用分布式鎖的來解決,比如我們在用戶進入秒殺 “下單“ 鏈接的過程中,我們可以對商品庫存進行加鎖,然后完成扣庫存和其他操作,操作完成后。釋放鎖,讓下一個用戶繼續(xù)進入保證庫存的安全性;也可以減少因為秒殺失敗,導(dǎo)致 DB 回滾的次數(shù)。整個流程如下圖所示:

 

注:對于鎖的粒度要根據(jù)具體的場景和需求來權(quán)衡。

三種分布式鎖

對于 Zookeeper 的分布式鎖實現(xiàn),主要是利用 Zookeeper 的兩個特征來實現(xiàn):

  1. Zookeeper 的一個節(jié)點不能被重復(fù)創(chuàng)建
  2. Zookeeper 的 Watcher 監(jiān)聽機制

非公平鎖

對于非公平鎖,我們在加鎖的過程如下圖所示。

優(yōu)點和缺點

其實上面的實現(xiàn)有優(yōu)點也有缺點:

優(yōu)點:

實現(xiàn)比較簡單,有通知機制,能提供較快的響應(yīng),有點類似 ReentrantLock 的思想,對于節(jié)點刪除失敗的場景由 Session 超時保證節(jié)點能夠刪除掉。

缺點:

重量級,同時在大量鎖的情況下會有 “驚群” 的問題。

“驚群” 就是在一個節(jié)點刪除的時候,大量對這個節(jié)點的刪除動作有訂閱 Watcher 的線程會進行回調(diào),這對Zk集群是十分不利的。所以需要避免這種現(xiàn)象的發(fā)生。

解決“驚群”:

為了解決“驚群“問題,我們需要放棄訂閱一個節(jié)點的策略,那么怎么做呢?

  1. 我們將鎖抽象成目錄,多個線程在此目錄下創(chuàng)建瞬時的順序節(jié)點,因為 Zookeeper 會為我們保證節(jié)點的順序性,所以可以利用節(jié)點的順序進行鎖的判斷。
  2. 首先創(chuàng)建順序節(jié)點,然后獲取當(dāng)前目錄下最小的節(jié)點,判斷最小節(jié)點是不是當(dāng)前節(jié)點,如果是那么獲取鎖成功,如果不是那么獲取鎖失敗。
  3. 獲取鎖失敗的節(jié)點獲取當(dāng)前節(jié)點上一個順序節(jié)點,對此節(jié)點注冊監(jiān)聽,當(dāng)節(jié)點刪除的時候通知當(dāng)前節(jié)點。
  4. 當(dāng)unlock的時候刪除節(jié)點之后會通知下一個節(jié)點。

公平鎖

基于非公平鎖的缺點,我們可以通過一下的方案來規(guī)避。

優(yōu)點和缺點

優(yōu)點: 如上借助于臨時順序節(jié)點,可以避免同時多個節(jié)點的并發(fā)競爭鎖,緩解了服務(wù)端壓力。

缺點: 對于讀寫場景來說,無法解決一致性的問題,如果讀的時候也去獲取鎖的話,這樣會導(dǎo)致性能下降,對于這樣的問題,我們可以通過讀寫鎖來實現(xiàn)如類似 jdk 中的 ReadWriteLock

讀寫鎖實現(xiàn)

對于讀寫鎖的特點:讀寫鎖在如果多個線程都是在讀的時候,是可以并發(fā)讀的,就是一個無鎖的狀態(tài),如果有寫鎖正在操作的時候,那么讀鎖需要等待寫鎖。在加寫鎖的時候,由于前面的讀鎖都是并發(fā),所以需要監(jiān)聽最后一個讀鎖完成后執(zhí)行寫鎖。步驟如下:

  1. read 請求, 如果前面是讀鎖,可以直接讀取,不需要監(jiān)聽。如果前面是一個或者多個寫鎖那么只需要監(jiān)聽最后一個寫鎖。
  2. write 請求,只需要對前面的節(jié)點監(jiān)聽。Watcher 機制和互斥鎖一樣。

分布式鎖實戰(zhàn)

本文源碼中使用環(huán)境:JDK 1.8 、Zookeeper 3.6.x

Curator 組件實現(xiàn)

POM 依賴

  1. <dependency> 
  2.   <groupId>org.apache.curator</groupId> 
  3.   <artifactId>curator-framework</artifactId> 
  4.   <version>2.13.0</version> 
  5. </dependency> 
  6. <dependency> 
  7.   <groupId>org.apache.curator</groupId> 
  8.   <artifactId>curator-recipes</artifactId> 
  9.   <version>2.13.0</version> 
  10. </dependency> 

互斥鎖運用

由于 Zookeeper 非公平鎖的 “驚群” 效應(yīng),非公平鎖在 Zookeeper 中其實并不是最好的選擇。下面是一個模擬秒殺的例子來使用 Zookeeper 分布式鎖。

  1. public class MutexTest { 
  2.     static ExecutorService executor = Executors.newFixedThreadPool(8); 
  3.     static AtomicInteger stock = new AtomicInteger(3); 
  4.     public static void main(String[] args) throws InterruptedException { 
  5.         CuratorFramework client = getZkClient(); 
  6.         String key = "/lock/lockId_111/111"
  7.         final InterProcessMutex mutex = new InterProcessMutex(client, key); 
  8.         for (int i = 0; i < 99; i++) { 
  9.             executor.submit(() -> { 
  10.                 if (stock.get() < 0) { 
  11.                     System.err.println("庫存不足, 直接返回"); 
  12.                     return
  13.                 } 
  14.                 try { 
  15.                     boolean acquire = mutex.acquire(200, TimeUnit.MILLISECONDS); 
  16.                     if (acquire) { 
  17.                         int s = stock.decrementAndGet(); 
  18.                         if (s < 0) { 
  19.                             System.err.println("進入秒殺,庫存不足"); 
  20.                         } else { 
  21.                             System.out.println("購買成功, 剩余庫存: " + s); 
  22.                         } 
  23.                     } 
  24.                 } catch (Exception e) { 
  25.                     e.printStackTrace(); 
  26.                 } finally { 
  27.                     try { 
  28.                         if (mutex.isAcquiredInThisProcess()) 
  29.                             mutex.release(); 
  30.                     } catch (Exception e) { 
  31.                         e.printStackTrace(); 
  32.                     } 
  33.                 } 
  34.             }); 
  35.         } 
  36.         while (true) { 
  37.             if (executor.isTerminated()) { 
  38.                 executor.shutdown(); 
  39.                 System.out.println("秒殺完畢剩余庫存為:" + stock.get()); 
  40.             } 
  41.             TimeUnit.MILLISECONDS.sleep(100); 
  42.         } 
  43.     } 
  44.     private static CuratorFramework getZkClient() { 
  45.         String zkServerAddress = "127.0.0.1:2181"
  46.         ExponentialBackoffRetry retryPolicy = new ExponentialBackoffRetry(1000, 3, 5000); 
  47.         CuratorFramework zkClient = CuratorFrameworkFactory.builder() 
  48.                 .connectString(zkServerAddress) 
  49.                 .sessionTimeoutMs(5000) 
  50.                 .connectionTimeoutMs(5000) 
  51.                 .retryPolicy(retryPolicy) 
  52.                 .build(); 
  53.         zkClient.start(); 
  54.         return zkClient; 
  55.     } 

讀寫鎖運用

讀寫鎖可以用來保證緩存雙寫的強一致性的,因為讀寫鎖在多線程讀的時候是無鎖的, 只有在前面有寫鎖的時候才會等待寫鎖完成后訪問數(shù)據(jù)。

  1. public class ReadWriteLockTest { 
  2.     static ExecutorService executor = Executors.newFixedThreadPool(8); 
  3.     static AtomicInteger stock = new AtomicInteger(3); 
  4.     static InterProcessMutex readLock; 
  5.     static InterProcessMutex writeLock; 
  6.     public static void main(String[] args) throws InterruptedException { 
  7.         CuratorFramework client = getZkClient(); 
  8.         String key = "/lock/lockId_111/1111"
  9.         InterProcessReadWriteLock readWriteLock = new InterProcessReadWriteLock(client, key); 
  10.         readLock = readWriteLock.readLock(); 
  11.         writeLock = readWriteLock.writeLock(); 
  12.         for (int i = 0; i < 16; i++) { 
  13.             executor.submit(() -> { 
  14.                 try { 
  15.                     boolean read = readLock.acquire(2000, TimeUnit.MILLISECONDS); 
  16.                     if (read) { 
  17.                         int num = stock.get(); 
  18.                         System.out.println("讀取庫存,當(dāng)前庫存為: " + num); 
  19.                         if (num < 0) { 
  20.                             System.err.println("庫存不足, 直接返回"); 
  21.                             return
  22.                         } 
  23.                     } 
  24.                 } catch (Exception e) { 
  25.                     e.printStackTrace(); 
  26.                 }finally { 
  27.                     if (readLock.isAcquiredInThisProcess()) { 
  28.                         try { 
  29.                             readLock.release(); 
  30.                         } catch (Exception e) { 
  31.                             e.printStackTrace(); 
  32.                         } 
  33.                     } 
  34.                 } 
  35.                 try { 
  36.                     boolean acquire = writeLock.acquire(2000, TimeUnit.MILLISECONDS); 
  37.                     if (acquire) { 
  38.                         int s = stock.get(); 
  39.                         if (s <= 0) { 
  40.                             System.err.println("進入秒殺,庫存不足"); 
  41.                         } else { 
  42.                             s = stock.decrementAndGet(); 
  43.                             System.out.println("購買成功, 剩余庫存: " + s); 
  44.                         } 
  45.                     } 
  46.                 } catch (Exception e) { 
  47.                     e.printStackTrace(); 
  48.                 } finally { 
  49.                     try { 
  50.                         if (writeLock.isAcquiredInThisProcess()) 
  51.                             writeLock.release(); 
  52.                     } catch (Exception e) { 
  53.                         e.printStackTrace(); 
  54.                     } 
  55.                 } 
  56.             }); 
  57.         } 
  58.         while (true) { 
  59.             if (executor.isTerminated()) { 
  60.                 executor.shutdown(); 
  61.                 System.out.println("秒殺完畢剩余庫存為:" + stock.get()); 
  62.             } 
  63.             TimeUnit.MILLISECONDS.sleep(100); 
  64.         } 
  65.     } 
  66.     private static CuratorFramework getZkClient() { 
  67.         String zkServerAddress = "127.0.0.1:2181"
  68.         ExponentialBackoffRetry retryPolicy = new ExponentialBackoffRetry(1000, 3, 5000); 
  69.         CuratorFramework zkClient = CuratorFrameworkFactory.builder() 
  70.                 .connectString(zkServerAddress) 
  71.                 .sessionTimeoutMs(5000) 
  72.                 .connectionTimeoutMs(5000) 
  73.                 .retryPolicy(retryPolicy) 
  74.                 .build(); 
  75.         zkClient.start(); 
  76.         return zkClient; 
  77.     } 

打印結(jié)果如下,一開始會有 8 個輸出結(jié)果為 讀取庫存,當(dāng)前庫存為: 3 然后在寫鎖中回去順序的扣減少庫存。

  1. 讀取庫存,當(dāng)前庫存為: 3 
  2. 讀取庫存,當(dāng)前庫存為: 3 
  3. 讀取庫存,當(dāng)前庫存為: 3 
  4. 讀取庫存,當(dāng)前庫存為: 3 
  5. 讀取庫存,當(dāng)前庫存為: 3 
  6. 讀取庫存,當(dāng)前庫存為: 3 
  7. 讀取庫存,當(dāng)前庫存為: 3 
  8. 讀取庫存,當(dāng)前庫存為: 3 
  9. 購買成功, 剩余庫存: 2 
  10. 購買成功, 剩余庫存: 1 
  11. 購買成功, 剩余庫存: 0 
  12. 進入秒殺,庫存不足 
  13. 進入秒殺,庫存不足 
  14. 進入秒殺,庫存不足 
  15. 進入秒殺,庫存不足 
  16. 進入秒殺,庫存不足 
  17. 讀取庫存,當(dāng)前庫存為: 0 
  18. 讀取庫存,當(dāng)前庫存為: 0 
  19. 讀取庫存,當(dāng)前庫存為: 0 
  20. 讀取庫存,當(dāng)前庫存為: 0 
  21. 讀取庫存,當(dāng)前庫存為: 0 
  22. 讀取庫存,當(dāng)前庫存為: 0 
  23. 讀取庫存,當(dāng)前庫存為: 0 
  24. 讀取庫存,當(dāng)前庫存為: 0 
  25. 進入秒殺,庫存不足 
  26. 進入秒殺,庫存不足 
  27. 進入秒殺,庫存不足 
  28. 進入秒殺,庫存不足 
  29. 進入秒殺,庫存不足 
  30. 進入秒殺,庫存不足 
  31. 進入秒殺,庫存不足 
  32. 進入秒殺,庫存不足 

分布式鎖的選擇

咱們最常用的就是 Redis 的分布式鎖和 Zookeeper 的分布式鎖,在性能方面 Redis 的每秒鐘 TPS 可以上輕松上萬。在大規(guī)模的高并發(fā)場景我推薦使用 Redis 分布式鎖來作為推薦的技術(shù)方案。如果對并發(fā)要求不是特別高的場景可以使用 Zookeeper 分布式來處理。

參考資料

https://www.cnblogs.com/leeego-123/p/12162220.html

http://curator.apache.org/

https://blog.csdn.net/hosaos/article/details/89521537

 

責(zé)任編輯:姜華 來源: 運維開發(fā)故事
相關(guān)推薦

2022-02-10 08:57:45

分布式線程鎖

2024-04-26 08:06:58

分布式系統(tǒng)

2019-06-19 15:40:06

分布式鎖RedisJava

2023-03-01 08:07:51

2024-01-09 08:20:05

2023-04-03 10:00:00

Redis分布式

2022-05-18 10:38:51

Redis分布式鎖數(shù)據(jù)

2021-10-09 11:34:59

MySQL分布式鎖庫存

2018-07-16 09:00:06

Ceph運維開源

2018-06-28 08:18:56

Ceph運維存儲

2018-07-17 08:14:22

分布式分布式鎖方位

2021-07-16 07:57:34

ZooKeeperCurator源碼

2019-02-26 09:51:52

分布式鎖RedisZookeeper

2019-07-18 09:17:19

Kafka消息隊列服務(wù)器

2022-08-04 08:45:50

Redisson分布式鎖工具

2018-11-27 16:17:13

分布式Tomcat

2021-11-26 06:43:19

Java分布式

2020-04-23 11:18:14

Redis分布式

2025-09-29 00:00:00

2023-06-14 17:56:54

點贊
收藏

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

亚洲区小说区| 55av亚洲| 久久99精品网久久| 欧美激情一级二级| 中文字幕狠狠干| 91九色综合| 一区二区在线观看不卡| 久久精品国产精品青草色艺| 中文字幕乱码中文字幕| 黄页网站一区| 中文字幕精品在线| 无码国产69精品久久久久网站| 日韩伦理三区| 亚洲一区二区四区蜜桃| 先锋影音日韩| 天堂在线视频观看| 激情综合色综合久久综合| 韩国19禁主播vip福利视频| 99久久精品免费视频| 玖玖玖视频精品| 在线视频国产一区| 人人妻人人澡人人爽欧美一区双| 国产日本在线观看| 成人性色生活片免费看爆迷你毛片| 日本老师69xxx| 久久久综合久久| 97视频精品| 日韩电影中文字幕在线| 一级片免费在线观看视频| 网友自拍亚洲| 欧美性69xxxx肥| 久久这里只有精品18| 亚洲乱亚洲乱妇| 久久久久国产精品免费免费搜索| 国产a一区二区| 国产女人18毛片18精品| 秋霞影院一区二区| 欧美最猛性xxxxx(亚洲精品)| 欧美人妻精品一区二区免费看| 精品国内自产拍在线观看视频| 亚洲成色777777在线观看影院| 亚洲黄色片免费| 福利一区视频| 欧美系列一区二区| 人人爽人人av| 亚洲成人看片| 欧美性猛交xxxx免费看| 人人妻人人添人人爽欧美一区| 青草在线视频| 一区二区三区四区不卡视频| 做爰高潮hd色即是空| 免费不卡视频| 亚洲欧洲成人精品av97| 一区二区三区四区欧美| 午夜激情视频在线观看| 国产精品天美传媒| 亚洲一区尤物| 成视频免费观看在线看| 自拍偷拍欧美激情| 一二三四中文字幕| 免费在线中文字幕| 亚洲国产精品精华液网站| 国产乱子伦精品视频| 97影院秋霞午夜在线观看| 亚洲欧洲制服丝袜| 国产亚洲精品久久久久久久| 国产偷倩在线播放| 亚洲电影中文字幕在线观看| 久久国产精品视频在线观看| 欧产日产国产精品视频| 色综合久久中文综合久久97| av免费在线播放网站| 欧美日韩精品免费观看视欧美高清免费大片| 日韩欧美亚洲范冰冰与中字| 亚洲少妇第一页| 久久青草视频| 日韩免费视频一区二区| 无码一区二区精品| 视频一区中文| 不卡毛片在线看| 久久网一区二区| 国产精品美女| 国产中文字幕日韩| 亚洲福利在线观看视频| 91免费观看在线| 五月天亚洲综合情| 四季久久免费一区二区三区四区| 亚洲一卡二卡三卡四卡无卡久久 | 欧美日韩在线大尺度| 午夜免费日韩视频| 中文字幕资源网| 国产精品一品二品| 蜜桃精品久久久久久久免费影院 | 国产精品无码专区av在线播放| 51一区二区三区| 欧美一级片免费看| 右手影院亚洲欧美| 亚洲成人精选| 清纯唯美亚洲综合| 99久久久国产精品无码网爆| 99久久国产免费看| 天天成人综合网| 免费毛片b在线观看| 欧美日韩国产片| 久久福利小视频| 99精品小视频| 欧洲中文字幕国产精品| 精品国产一级片| 久久色成人在线| 国产一级大片免费看| 婷婷激情一区| 精品国产sm最大网站免费看| 国产精品无码无卡无需播放器| 欧美色图麻豆| 国产精品网址在线| 四季av日韩精品一区| 成人免费在线观看入口| 各处沟厕大尺度偷拍女厕嘘嘘| 四虎精品永久免费| 亚洲欧美一区二区三区情侣bbw| 99鲁鲁精品一区二区三区| 亚洲免费综合| 99re国产在线播放| 日韩在线观看www| 日韩欧美中文字幕在线播放| 国产亚洲精品成人a| 99久久视频| 日韩女优人人人人射在线视频| 亚洲老妇色熟女老太| 成人免费一区二区三区视频 | 裸体武打性艳史| 奇米一区二区三区| 欧美不卡三区| 狠狠躁少妇一区二区三区| 日韩欧美综合一区| 男女做暖暖视频| 韩国av一区二区| 亚洲精品高清视频| 秋霞国产精品| 国产亚洲视频在线观看| 日韩人妻精品中文字幕| av动漫一区二区| 欧美精品自拍视频| 福利在线一区| 久久久久久有精品国产| 亚洲国产精品无码久久| 亚洲精品久久久久久国产精华液| 午夜精品中文字幕| 午夜免费一区| 91精品免费视频| 久久99精品久久久久久野外| 欧美日韩国产欧美日美国产精品| 又色又爽的视频| 免费在线观看日韩欧美| 亚洲精品一区二区三区蜜桃久| 国产一区一一区高清不卡| 亚洲欧美在线磁力| 中文字幕 欧美激情| 国产精品美女一区二区| 国产乱女淫av麻豆国产| 亚洲国产不卡| 成人欧美一区二区三区黑人免费| 污的网站在线观看| 亚洲丁香婷深爱综合| 国产午夜性春猛交ⅹxxx| 91麻豆免费看| 精品久久久久久中文字幕2017| 欧美综合一区| 亚洲影院色在线观看免费| 69成人在线| 亚洲成人xxx| 欧美 日韩 精品| 中文字幕 久热精品 视频在线| 亚洲一区精品视频在线观看| 亚洲人体av| 国产欧美韩日| av激情成人网| 欧美夫妻性视频| 五月天丁香视频| 在线观看av不卡| 欧美成人国产精品高潮| zzijzzij亚洲日本少妇熟睡| 国产一区二区视频免费在线观看| 俺要去色综合狠狠| 国产精品久久久久久久久久直播 | 一本色道久久综合精品竹菊| 青娱乐国产视频| 国产精品91xxx| 干日本少妇首页| 91精品蜜臀一区二区三区在线| 国产伦精品一区二区三区视频黑人 | 136导航精品福利| 欧美最猛性xxxxx免费| 日本韩国在线视频爽| 亚洲成人av在线播放| 影音先锋国产在线| 一区二区三区免费| 欧洲av一区二区三区| 国产精品一区二区久久精品爱涩| 国产免费黄色av| 久久精品青草| 任我爽在线视频精品一| 欧洲精品99毛片免费高清观看| 日本精品一区二区三区在线播放视频| 伦xxxx在线| 国产视频精品免费播放| 国产伦子伦对白视频| 色综合天天综合网天天看片| 中文字幕亚洲欧美日韩| 国产欧美一区二区精品婷婷| 特黄特色免费视频| 久色婷婷小香蕉久久| 日韩欧美一区三区| 欧美在线高清| 亚洲在线观看一区| 亚洲天堂日韩在线| 国产精品大全| 成人黄色理论片| 日本久久精品视频| 美女在线视频免费| 欧美激情视频播放| 麻豆影视国产在线观看| 一区二区欧美亚洲| 四虎在线免费看| 欧美精品一区二区三区视频| 国产精品一级视频| 欧美日韩中字一区| 一级片在线观看免费| 亚洲一区视频在线| 毛片aaaaa| 亚洲免费三区一区二区| 永久av免费网站| 国产欧美一区视频| 91久久免费视频| 91免费在线视频观看| 尤物网站在线观看| 成人免费av在线| 在线xxxxx| 成人性生交大片免费看视频在线| 黄页网站在线看| 国产精品1区2区| 香蕉网在线视频| 国产在线精品一区二区| 中文字幕线观看| 久久99九九99精品| 日韩成人av免费| 黑人巨大精品欧美黑白配亚洲| 男人添女人下面免费视频| 日韩福利视频网| jizz18女人| 韩国女主播成人在线观看| 欧美日韩亚洲自拍| 久国产精品韩国三级视频| 污污视频网站在线| 国产精品综合一区二区三区| 欧美日韩理论片| 国产大片一区二区| 国产成人av无码精品| av一区二区不卡| 伊人网在线视频观看| 国产蜜臀97一区二区三区 | 日本不卡免费一区| 一区二区三区久久网| 一本一本久久a久久综合精品| 一级性生活视频| 亚洲经典在线| 日本久久精品一区二区| 久久精品国产99| 国产又黄又嫩又滑又白| av在线不卡电影| 黄色片网站免费| 亚洲视频一二区| 国产中文字幕免费| 色久优优欧美色久优优| 国产精品国产一区二区三区四区| 日韩一级完整毛片| 天堂中文在线视频| 色999日韩欧美国产| 午夜影院免费在线| 日韩av免费一区| 国产电影一区| 精品免费一区二区三区蜜桃| 精品无人区麻豆乱码久久久| 无码人妻精品一区二区三区99v| 在线电影一区| 亚洲一级免费在线观看| 粉嫩嫩av羞羞动漫久久久| 亚洲熟妇一区二区三区| 亚洲天堂2014| 久久青青草视频| 91精选在线观看| 欧美性孕妇孕交| 久久亚洲欧美日韩精品专区| 伊人网在线播放| 92看片淫黄大片欧美看国产片| 欧美理论电影在线精品| 在线观看国产一区| 国产精品最新自拍| 国产免费中文字幕| 久久婷婷国产综合国色天香| 秋霞欧美一区二区三区视频免费| 午夜欧美大尺度福利影院在线看 | 美女视频免费一区| 中文字幕制服丝袜| 国产精品色在线观看| 日韩精品一区二区av| 欧美精品v日韩精品v韩国精品v| 日本人妻熟妇久久久久久| 色偷偷偷综合中文字幕;dd| 成全电影大全在线观看| 91精品久久久久久久久久 | 国产一区二三区好的| 超碰97人人干| 亚洲香蕉伊在人在线观| 亚洲综合一区中| 亚洲欧美国产视频| 色婷婷在线播放| 91久久久久久久久久久久久| 在线观看欧美理论a影院| 国产成人艳妇aa视频在线| 麻豆91小视频| 国产美女喷水视频| 亚洲福利视频导航| 精品欧美在线观看| 日韩有码视频在线| 国产亚洲人成a在线v网站 | 国产精品久久久久9999| 欧美成人午夜77777| 少妇大叫太大太粗太爽了a片小说| 日本美女视频一区二区| 亚洲理论片在线观看| 五月激情六月综合| 亚洲国产综合网| 久久99亚洲精品| 综合欧美精品| 中文字幕不卡每日更新1区2区| 日韩在线卡一卡二| 一色道久久88加勒比一| 婷婷成人综合网| 三级网站免费观看| 国内精品伊人久久| 久久超级碰碰| 精品丰满人妻无套内射| 大陆成人av片| 亚洲一区 视频| 亚洲国产精品成人精品| 高h视频在线播放| 激情五月综合色婷婷一区二区| 亚洲午夜视频| 97精品人妻一区二区三区蜜桃| 亚州成人在线电影| 日韩一级片免费在线观看| 久久久噜噜噜久久中文字免| 国产精品对白| 久草热视频在线观看| 91丨九色丨尤物| 国产黄网在线观看| 一本色道久久88精品综合| 巨胸喷奶水www久久久| 亚洲欧洲精品一区二区三区波多野1战4| 老司机亚洲精品| 日韩亚洲欧美中文字幕| 欧美精品v日韩精品v韩国精品v| 成年人网站在线| 国产91免费视频| 免费日韩av片| 成人黄色短视频| 日韩久久精品一区| 国产ktv在线视频| 欧洲一区二区在线观看| 久久精品国产网站| 亚洲色婷婷一区二区三区| 久久电影国产免费久久电影| 国产精品1000部啪视频| 欧洲亚洲精品在线| 黄网站在线播放| 成人综合av网| 亚洲影音先锋| 久久人妻无码aⅴ毛片a片app| 91麻豆精品国产自产在线| 草美女在线观看| 欧洲亚洲一区| 国产在线精品一区二区 | 日本福利一区二区| 777电影在线观看| 99久久精品久久久久久ai换脸| 国产精品免费看| 国产精品理论在线| 精品国产乱子伦一区| 欧美黑人粗大| 一本色道久久88亚洲精品综合| youjizz久久| 中文字幕欧美人妻精品| 久久久久久久久久久人体| 成人黄色小视频| www.555国产精品免费| 欧美专区日韩专区| sis001亚洲原创区| 一本久道久久综合| 26uuu色噜噜精品一区二区|