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

如何用MySQL設計一個分布式鎖?

數據庫 MySQL
關于如何實現分布式鎖,大家可能對基于Redis?實現比較熟悉,但是往往很多情況是一些并發量不大的項目用不上Redis,Redis往往適用于并發量比較大的場景。但是MySQL基本都是有的,所以今天我來談談如何基于MySQL實現我們的分布式鎖。

?前言

分布式鎖想必大家都不陌生,可以用來解決在分布式環境下,多個用戶在同一時間讀取/更新相同的資源帶來的問題。比如秒殺場景下的庫存問題、redis key失效情況下請求直接打到MySQL中造成MySQL負載過大的問題,這些問題都可以通過分布式鎖來解決。

圖片

關于如何實現分布式鎖,大家可能對基于Redis?實現比較熟悉,但是往往很多情況是一些并發量不大的項目用不上Redis,Redis往往適用于并發量比較大的場景。但是MySQL基本都是有的,所以今天我來談談如何基于MySQL實現我們的分布式鎖。

設計目標

  1. 互斥。不同機器上許多進程/線程中只有一個可以訪問特定資源,其他進程/線程應該等到鎖被釋放才可以用。
  2. TTL。從CAP理論我們知道,網絡總是不可靠的,任何一臺服務器都有可能宕機一段時間。所以我們在設計分布式鎖服務的時候,需要考慮到可能有一個持有鎖的客戶端宕機,無法釋放鎖,從而阻塞所有等待獲取同一個鎖的客戶端。所以我們需要一種機制,可以在這種情況下自動釋放鎖來解鎖其他客戶端。
  3. 相關API
  • lock():獲取鎖
  • unlock():釋放鎖
  • tryLock(): 可選,更高級的API,例如:客戶端可以指定獲取鎖的最大等待時間。如果不能在窗口內獲得鎖,則錯誤返回而不是繼續等待。
  1. 高性能
  • 低延遲:在正常情況下,鎖定和解鎖應該非常快。比如實際的業務邏輯處理只需要1ms,而單純的獲取和釋放鎖,處理一個請求又需要100ms,那么最大QPS只能達到10,這對于現在的很多服務來說已經很低了。在這種情況下,服務器可以處理的最大 QPS 受到鎖性能的限制。
  • 通知機制:分布式鎖理想情況下應該提供通知機制。如果服務器進程A由于被另一個服務器進程B持有而無法獲得鎖,那么A不應該一直等待并占用CPU。相反,A 應該空閑以避免浪費 CPU資源 。然后當鎖可用時,鎖服務通知A,A將獲得CPU資源并恢復運行。
  • 避免驚群效應。假設有 100 個進程想要獲取同一個鎖,當鎖可用時,理想情況下應該只通知隊列中的“下一個”進程,而不是突然調用所有 100 個進程來競爭鎖。
  1. 公平。先到先得。等待時間最長的人應該下一個獲得鎖。如果是這樣,則該鎖被認為是公平鎖。否則就是非公平鎖。這兩種鎖在現實中都有實際使用。
  2. 重入鎖。 想象一下,一個節點或服務器進程獲取了一個鎖,開始處理業務邏輯,然后遇到一個代碼片段要求再次獲取同一個鎖,在這種情況下,節點或進程不應死鎖,相反,它應該能夠再次獲取相同的鎖,因為它已經持有鎖。

MySQL如何實現分布式鎖?

1. 唯一鍵約束

我們可以使用MySQL的唯一性約束來實現分布式鎖,整體的思路如下:

  • 客戶端 A 正在嘗試獲取鎖。此時沒有其他客戶端持有鎖,所以客戶端A成功獲取到了鎖,并向MySQL表中插入一行數據。
  • 現在客戶端 B 想要獲取相同的鎖,先查詢DB,發現客戶端A插入的行已經存在。在這種情況下,客戶端B無法獲取到鎖。然后客戶端 B 將等待一段時間后重試。客戶端 B 會在指定的 TTL 窗口內不斷重試幾次,最終要么在客戶端 A 釋放鎖后成功獲取鎖,要么因為 TTL 而失敗。
  • 一旦客戶端 A 完成其任務,它將通過簡單地刪除 DB 表中的行來釋放鎖lock。現在其他客戶端能夠獲取鎖。

現在我們來簡單實現下,創建一個lock?表,其中lock_key字段有唯一性約束。

CREATE TABLE `lock` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`lock_key` varchar(256) NOT NULL,
`holder` varchar(256) NOT NULL,
`creation_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_lock_key` (`lock_key`)
);
  • lock_key? 是鎖的唯一名稱。我們可以使用 project_name + resource_id 作為鎖的名稱,表明要搶的資源是什么,具備唯一性。
  • holder?是當前持有鎖的客戶端ID。我們可以使用service_name +IP 地址 + thread_id 來標識分布式環境中的客戶端。

獲取鎖:

INSERT INTO `lock`(`lock_key`, `holder`) VALUES ('project1_uid1', 'server1_ip1_tid1');

釋放鎖:

DELETE FROM `lock` WHERE `lock_key` = 'project1_uid1';

上面的方案已經基本滿足通過MySQL實現分布式鎖的基本要求。現在讓我們考慮一些特殊情況,看看它是否對分布式系統中的常見故障具有魯棒性。

如果客戶端 A 獲取了鎖,向 DB 中插入了一行,但后來客戶端 A 崩潰了,或者網絡分區和客戶端 A 無法訪問 DB 怎么辦?在這種情況下,該行將保留在數據庫中,不會被刪除。換句話說,對于其他客戶端來說,就好像客戶端 A 仍然持有鎖(即使 A 已經崩潰了!)。其他客戶端將無法獲取鎖,并返回錯誤。

一種常用的方法是為每個鎖分配一個 TTL。這個想法很簡單:如果客戶端 A 崩潰并且無法釋放鎖,那么其他人應該執行刪除 DB 中的行從而釋放鎖的工作。假設通常客戶端 A 需要 3 分鐘才能完成任務。我們可以將 TTL 設置為 5 分鐘。然后我們需要構建另一個服務來不斷掃描lock表,并刪除超過 5 分鐘前創建的任何行。但是,還有其他問題:

  • 如果 A 沒有崩潰,它只需要比平時多一點時間來完成任務怎么辦?
  • 如果我們為掃描lock表而構建的這項新服務本身崩潰了怎么辦?

第一個問題用MySQL很難完全解決。我們可以考慮A在獲取到分布式鎖后,新起個線程去檢查鎖是否快要過期了,比如發現TTL還剩下1/3時間,但是A還沒有結束,這時候去擴大TTL時間,這就是鎖的續簽機制。但是在現實中,對于大部分的業務案例,我們總是可以設置一個足夠大的TTL,使得這種情況很少發生,以至于對公司業務的影響幾乎察覺不到。

現在讓我們看看第2個問題怎么解決?

2. 使用時間戳+唯一鍵約束

我們可以在lock?表中添加一列來存儲上次獲取鎖的時間戳last_lock_time。

CREATE TABLE `lock` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`lock_key` varchar(128) NOT NULL,
`holder` varchar(128) NOT NULL DEFAULT '',
`version` int(11) not null,
`creation_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`last_lock_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_lock_key` (`lock_key`)
);

現在我們用${timeout}表示分布式鎖的TTL。

獲取鎖:

當客戶端 B 試圖獲取鎖時,我們可以添加`last_lock_time` < ${now} - ${timeout}?作為where條件的一部分。

UPDATE `lock` SET `holder` = 'server1_ip1_tid1', `last_lock_time` = ${now} WHERE `lock_key` = 'project1_uid1' and `last_lock_time` < ${now} - ${timeout};

在這種情況下,只有當`last_lock_time` < ${now} - ${timeout}?客戶端 B 可以獲取鎖、將 holder? 更改為其 ID 并將其重置last_lock_time?為當前時間戳時。假設后面客戶端 B 掛了,不能釋放鎖,最壞的情況是等待${timeout}TTL時間以后,其他客戶端就能拿到鎖。

釋放鎖:

我們可以把last_lock_time?更新為一個很小時間戳,例如‘1970–01–01 00:00:01’。

UPDATE `lock` SET `holder` = '', `last_lock_time` = ${min_timestamp} WHERE `lock_key` = 'project1_uid1' and `holder` = 'server1_ip1_tid1';

在WHERE語句中,我們添加了`holder` = ‘server1_ip1_tid1’,這是為了避免其他客戶端不小心釋放了當前客戶端持有的鎖。

成功釋放鎖后,holder?將其設置為空,并將last_lock_time設置為最小時間戳,以便其他客戶端可以輕松獲取鎖。

現在我們解決了TTL問題,但是在上面的實現中,如果持有鎖,其他客戶端將需要一直循環重試,等待鎖釋放后再獲取鎖。如果分布式鎖服務可以通知等待的客戶端鎖可用,那就更好了,我們思考下在MySQL中該如何實現。

3.使用FOR UPDATE?實現鎖釋放通知

MySQL具有行級鎖功能,在RC隔離級別下,當我們使用FOR UPDATE?時,MySQL會為所有符合過濾條件的行加行級鎖。當一個客戶端會話獲得鎖時,所有其他客戶端都將等待鎖。此外,等待客戶端喚醒并獲取鎖的順序與它們首次嘗試獲取鎖時的順序相同。只要持有鎖的客戶端在 SQL 事務內執行邏輯,FOR UPDATE 就可以執行多次。換句話說,鎖是重入鎖。

另外,針對FOR UPDATE?,MySQL還支持兩種模式:NOWAIT? 和 SKIP LOCKED。

  • NOWAIT:不等待鎖的釋放。如果鎖被其他客戶端持有,無法獲取,則立即返回鎖沖突消息。
  • SKIP LOCKED:讀取數據時,跳過行級鎖被其他客戶端持有的行。

通過這兩個選項,我們可以實現tryLock行為,即客戶端嘗試獲取鎖,獲取不到鎖則立即返回,而不是等待。

我們可以簡化我們的lock表以僅包含兩個字段:

CREATE TABLE `lock` ( 
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`lock_key` varchar(128) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_lock_key` (`lock_key`)
);

獲取鎖:

BEGIN;
SELECT * FROM `demo`.`lock` WHERE `lock_key` = 'project1_uid1' FOR UPDATE;

這里關于啟動新事務BEGIN? 做一個說明,只有在第一次獲取鎖時才需要它。后續重入時,不要執行BEGIN,否則會啟動一個新的事務,現有的事務結束,實際上是在事務結束時釋放鎖。

非阻塞嘗試鎖tryLock():

BEGIN;
SELECT * FROM `demo`.`lock` WHERE `lock_key` = 'project1_uid1' FOR UPDATE NOWAIT;

釋放鎖:

COMMIT;

提交事務就可以釋放鎖。

總結

我們現在回頭來看看基于MySQL實現分布式鎖,是否滿足我們一開始定下的設計目標:

  1. 互斥,最基本的功能,肯定是可以的。
  2. TTL 機制,MySQL 本地管理客戶端會話。如果客戶端由于機器故障或網絡故障而斷開連接,MySQL 將自動釋放行級鎖。
  3. 支持所有 3 個 API:獲取/嘗試/釋放鎖。
  4. 高性能:釋放鎖時,MySQL只會通知隊列中等待的下一個客戶端,而不是一次性通知所有客戶端,避免雷群問題。
  5. 公平。MySQL 行鎖本身支持。
  6. 重入。MySQL 行鎖本身也支持。記住第一次獲取鎖就開始事務,以后再入時不要再開始新的事務。

看來基本上是沒什么問題的,但是還有一點,我們需要提前向lock表中插入資源鎖的數據,然后獲取/嘗試/釋放鎖的 API 才能按預期工作。

參考:https://medium.com/@bb8s/design-distributed-lock-with-mysql-9bc28ac59629

責任編輯:武曉燕 來源: JAVA旭陽
相關推薦

2024-07-15 08:25:07

2021-11-01 12:25:56

Redis分布式

2020-07-30 09:35:09

Redis分布式鎖數據庫

2024-02-19 00:00:00

Redis分布式

2024-07-29 09:57:47

2016-09-30 10:13:07

分布式爬蟲系統

2022-08-01 08:01:04

ID發號器系統

2022-04-14 07:56:30

公平鎖Java線程

2022-08-11 18:27:50

面試Redis分布式鎖

2021-06-24 10:27:48

分布式架構系統

2021-06-25 10:45:43

Netty 分布式框架 IO 框架

2018-09-06 22:49:31

分布式架構服務器

2023-09-21 22:22:51

開發分布式鎖

2023-09-04 08:45:07

分布式配置中心Zookeeper

2023-08-21 19:10:34

Redis分布式

2022-11-11 08:19:03

redis分布式

2024-05-08 10:20:00

Redis分布式

2022-06-14 10:47:00

分布式事務數據

2019-06-19 15:40:06

分布式鎖RedisJava

2024-10-07 08:52:59

分布式系統分布式 IDID
點贊
收藏

51CTO技術棧公眾號

欧美性受xxxx黑人xyx| 久久久久久久久岛国免费| 欧美第一淫aaasss性| 久久人人爽人人人人片| 精品欧美一区二区三区在线观看| 中文天堂在线一区| 99精品99久久久久久宅男| 日韩欧美国产亚洲| 精品成人影院| 欧美va在线播放| 激情内射人妻1区2区3区 | 日韩乱码人妻无码中文字幕| 精品国产一区二区三区香蕉沈先生| 91精品国产麻豆| av网站在线观看不卡| 免费在线看黄| 久久精品一区二区三区四区| 成人欧美一区二区三区视频| 亚洲性猛交富婆| 亚洲精品系列| 久久久精品久久久| 国精产品一区二区三区| 日本在线成人| 欧美三级韩国三级日本一级| 成年人视频观看| av官网在线播放| 国产精品每日更新在线播放网址| 好吊色欧美一区二区三区| 国产999久久久| 日本不卡免费在线视频| 91国内产香蕉| www.天天色| 亚洲精品91| 色先锋资源久久综合5566| 亚洲欧美色图视频| 蜜桃久久久久| 日韩欧美123| 日本一本在线视频| 亚洲一区av| 欧美丝袜丝交足nylons| 国产日韩一区二区在线观看| 国产美女高潮在线| 一区二区三区国产精品| 女女同性女同一区二区三区按摩| 国产日本在线| 国产日韩在线不卡| 欧美一卡2卡3卡4卡无卡免费观看水多多| 丰满人妻一区二区三区无码av| 精品一区二区日韩| 国产在线不卡精品| 夜夜爽8888| 久久99精品久久久久婷婷| 国产精品视频男人的天堂| 久久久成人免费视频| 国产精品日韩精品欧美精品| 992tv成人免费视频| 日本三级网站在线观看| 亚洲国产精品第一区二区| 久久久久久久久综合| 国产午夜福利精品| 亚洲少妇在线| 欧美在线视频一二三| 成人公开免费视频| 奇米777欧美一区二区| 国产精品网站入口| 亚洲一线在线观看| 国产在线观看免费一区| 91精品入口蜜桃| 成人午夜免费福利| 久久亚洲影视婷婷| 日韩中文一区二区三区| 天堂а√在线官网| 亚洲精品久久嫩草网站秘色| 国产视频在线观看网站| 蜜桃视频动漫在线播放| 色综合天天做天天爱| 五月婷婷之综合激情| 在线成人免费| 欧美精品一区二区在线观看| 欧美亚一区二区三区| av一区二区在线播放| xxxxx91麻豆| 黄色小视频在线免费看| 美女精品一区| 91久久久久久久久| 色偷偷在线观看| 国产欧美日产一区| 国产精品免费看久久久无码| 麻豆mv在线看| 欧美日本高清视频在线观看| 第一页在线视频| 少妇一区二区视频| 久久成年人视频| 国产成人在线视频观看| 久久 天天综合| 国产综合 伊人色| 在线观看精品一区二区三区| 一区二区三区成人| 手机看片福利盒子久久| 日韩一级淫片| 亚洲欧美自拍一区| 妺妺窝人体色www婷婷| 视频在线在亚洲| 91手机在线播放| 岛国视频免费在线观看| 亚洲一区二区三区不卡国产欧美| 丰满少妇在线观看| 国产乱论精品| 久久九九热免费视频| 亚洲成熟少妇视频在线观看| 国产精品一区二区黑丝| 三区精品视频| 男女羞羞在线观看| 日韩欧美一级片| 国产视频123区| 国产精品久久777777毛茸茸| 91亚洲永久免费精品| 精品乱码一区二区三四区视频 | 久久视频这里有精品| 亚洲男人在线| 一区二区三区黄色| 亚洲黄色激情视频| 国v精品久久久网| 亚洲免费av网| 成人综合网站| 亚洲欧美日韩在线高清直播| 日本午夜小视频| 国产成人免费视频| 免费成人进口网站| 久久精品嫩草影院| 一本色道久久综合狠狠躁篇怎么玩 | 一级片一区二区三区| 久久免费午夜影院| 国产精品无码av在线播放| 亚洲精品一二三**| 欧美精品一二区| 国产日韩免费视频| 国产精品成人一区二区三区夜夜夜| 精品一卡二卡三卡| 蜜乳av综合| 热99在线视频| 蜜芽tv福利在线视频| 日韩欧美国产中文字幕| 欧美性xxxx图片| 欧美一级一区| 欧美婷婷久久| 成人黄色图片网站| 亚洲最新在线视频| 一区二区视频在线免费观看| 国产欧美一区在线| 一本色道久久亚洲综合精品蜜桃| 国内成人自拍| 国产精品视频久久| 香蕉视频国产在线观看| 欧美高清www午色夜在线视频| 亚洲欧洲综合网| 国模娜娜一区二区三区| 国产成人精品免费看在线播放| 亚洲色图图片| 欧美第一黄色网| 少妇一区二区三区四区| 欧美小视频在线| 五月天精品视频| 美国欧美日韩国产在线播放| 在线观看福利一区| 视频二区欧美毛片免费观看| 国内精品久久久久久久| 日韩精品视频在线观看一区二区三区| 欧美日韩激情小视频| 亚洲日本精品视频| 九九国产精品视频| 欧美黄网在线观看| 久9re热视频这里只有精品| 青草热久免费精品视频| eeuss影院在线观看| 欧美一区二区在线免费观看| 精品无码黑人又粗又大又长| 91在线视频免费观看| 中文字幕国内自拍| 欧美va亚洲va日韩∨a综合色| 国产综合av一区二区三区| 欧美gay囗交囗交| 久久久极品av| 天堂成人在线| 日本韩国精品一区二区在线观看| 刘亦菲国产毛片bd| 成人性色生活片免费看爆迷你毛片| 亚洲中文字幕无码专区| 久久国产精品亚洲人一区二区三区| 92看片淫黄大片欧美看国产片| av中文字幕在线看| 最新69国产成人精品视频免费 | 国产丝袜精品视频| 中文字幕视频二区| 亚洲成人你懂的| 国产真人真事毛片视频| 成人av网站免费| 日韩不卡一二三| 91久久视频| 伊人久久大香线蕉午夜av| 国产调教精品| 成人在线视频福利| 在线能看的av网址| 欧美成人免费va影院高清| 男人的天堂在线| 欧美大胆人体bbbb| 亚洲一二区视频| 色综合天天狠狠| 国产成年人免费视频| 亚洲视频免费看| 熟女高潮一区二区三区| 成人天堂资源www在线| 国产精品v日韩精品v在线观看| 亚洲全部视频| 免费极品av一视觉盛宴| 第一sis亚洲原创| 久久riav| 老司机成人在线| 成人在线视频电影| 国产精品xnxxcom| 国产精品稀缺呦系列在线| 超碰国产一区| 97国产精品视频| 日韩av毛片| 欧美成人激情图片网| 亚洲视频tv| 亚洲午夜精品视频| 欧美孕妇孕交xxⅹ孕妇交| 亚洲成avwww人| 性中国xxx极品hd| 日韩一区二区三区电影| 91成年人视频| 在线成人免费观看| 国产一区二区在线播放视频| 欧洲精品一区二区| 69xxxx国产| 狠狠综合久久av一区二区小说| 国产精品第九页| 亚洲电影第三页| 日本熟妇色xxxxx日本免费看| 一区二区三区欧美| 久久久久性色av无码一区二区| 综合色中文字幕| 亚洲视频重口味| 亚洲色欲色欲www| 黑鬼狂亚洲人videos| 亚洲欧美一区二区久久 | 68国产成人综合久久精品| 亚洲福利av| 久久一区二区三区喷水| 亚洲欧美国产精品桃花| 日韩av二区| 亚洲综合视频一区| 先锋资源久久| 超碰97在线看| 亚洲欧洲午夜| av动漫在线观看| 日本中文一区二区三区| 天天干天天爽天天射| 国内外成人在线| 中国特级黄色片| 91一区一区三区| 亚洲理论片在线观看| 国产精品久久久久永久免费观看| 四虎地址8848| 亚洲一区二区三区视频在线 | 亚洲女同同性videoxma| 久久精品视频91| 国产综合成人久久大片91| 国产精品91av| 久久久影视传媒| 国产中文字幕久久| 亚洲一区二区欧美激情| 日韩精品一区二区亚洲av| 欧美三级中文字幕在线观看| 国产aⅴ一区二区三区| 亚洲第一精品自拍| 国产九九在线| 欧美夫妻性生活视频| 小h片在线观看| 成人精品福利视频| 欧美日韩一区二区三区四区不卡 | 日本一区二区三区网站| 国产精品视频九色porn| 久久人人爽人人爽人人| 色爱区综合激月婷婷| a在线观看视频| 亚洲欧美视频在线| 手机av在线播放| 国产精品1234| 大奶一区二区三区| 少妇免费毛片久久久久久久久| 欧美黄污视频| 亚洲黄色小视频在线观看| 成人aaaa免费全部观看| 在线观看亚洲大片短视频| 亚洲图片欧美视频| 在线免费看av片| 日韩国产一区三区| 国产激情视频在线观看| 日本一区二区在线播放| 日韩黄色av| 亚洲乱码一区二区三区三上悠亚 | 亚洲精品手机在线观看| 9色porny自拍视频一区二区| 91香蕉视频网| 色域天天综合网| 国产小视频免费观看| 日韩综合视频在线观看| 成人免费直播| 国产亚洲精品久久飘花| 91精品福利| 亚洲成人av免费看| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 青青在线精品| 青青草原亚洲| 一本久道久久综合狠狠爱| 欧美人与性动交α欧美精品| 亚洲国产精品二十页| 国产精品777777| 亚洲白拍色综合图区| 日本在线视频网址| 亚洲xxxxx| 亚洲不卡av不卡一区二区| 成人免费在线观看视频网站| 91麻豆福利精品推荐| 日本少妇裸体做爰| 精品成人免费观看| 欧洲成人综合网| 亚洲最大福利视频| 亚洲91视频| 中文国产在线观看| 亚洲私人黄色宅男| 亚洲天堂中文网| 伊是香蕉大人久久| 久久69成人| 亚洲国产精品综合| 日本伊人午夜精品| 四季av中文字幕| 在线观看一区日韩| 国产在线观看黄| 国产精品第七影院| 欧美日韩一区二区三区视频播放| 日韩精品一区二区三区色欲av| 99久久99久久免费精品蜜臀| 青青草av在线播放| 日韩经典一区二区三区| 午夜影院在线播放| 欧美一区二区高清在线观看| 久久婷婷影院| 免费一级特黄3大片视频| 欧美午夜视频网站| 在线免费观看黄色av| 91视频-88av| 欧美三级网页| 亚洲制服丝袜在线播放| 色爱区综合激月婷婷| 91xxx在线观看| 91影视免费在线观看| 激情成人综合| 日韩精品卡通动漫网站| 欧美自拍丝袜亚洲| 美女国产在线| 国产精品乱子乱xxxx| 亚洲影视在线| 2019男人天堂| 7777精品伊人久久久大香线蕉超级流畅| 国产黄网站在线观看| 精品国产_亚洲人成在线| 玖玖国产精品视频| 黄色录像一级片| 亚洲成在人线av| 亚洲第一会所001| 亚洲色图都市激情| 91偷拍与自偷拍精品| 一级爱爱免费视频| 欧美黑人性视频| 亚洲欧洲美洲国产香蕉| 日韩av一卡二卡三卡| 亚洲mv在线观看| 尤物在线视频| 国产精品久久久久久久小唯西川| 久久久久久穴| 青娱乐av在线| 亚洲欧美国内爽妇网| 日韩激情综合| 国产高潮免费视频| 亚洲制服丝袜av| 成人性生交大片免费看午夜| 99久久精品无码一区二区毛片| 久久激情一区| 久久久久久av无码免费网站| 亚洲一品av免费观看| 成人av资源网址| 亚洲国产日韩欧美在线观看| 午夜精品视频一区| 黄色网址在线免费播放| 美女被啪啪一区二区| 国产成人自拍网| 亚洲综合一区中|