精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品成久久久久| 青青草超碰在线| 99热国内精品永久免费观看| 日本中文一区二区三区| 欧美一区免费| 欧美一级久久久| 国产在线视频在线| 日本中文字幕一区二区有码在线| 日韩成人av影视| www.日本久久久久com.| 中文字幕一区二区三区人妻在线视频| 日韩伦理电影网站| 久久蜜臀精品av| 国产精品久久久久一区二区 | 国产精品久久久免费看| 国产一区二区高清在线| 午夜视频一区二区| 日本一区视频在线观看| 国产乱子伦精品无码码专区| 亚洲日产国产精品| 国产午夜精品视频免费不卡69堂| 男人的天堂最新网址| 亚洲夜夜综合| 久久精品视频网| 91最新国产视频| 精品美女久久久久| 国产精品二区不卡| 日韩乱码在线视频| 亚洲第一天堂久久| 欧美色网一区| 一卡二卡欧美日韩| 日韩精品在在线一区二区中文| 亚洲天堂2021av| 午夜久久影院| 日韩中文字幕不卡视频| 日本泡妞xxxx免费视频软件| 日韩欧美看国产| 一区二区在线电影| 亚洲精品在线视频观看| 五月天婷婷视频| 国产一区二区三区久久悠悠色av| 日产精品99久久久久久| 久草国产在线观看| 欧美韩日高清| 欧美96一区二区免费视频| 久久毛片高清国产| av资源一区二区| 青青艹在线观看| 亚洲片区在线| 欧美成人午夜视频| 久久久久99精品成人| 伊人成综合网伊人222| 日韩片之四级片| 亚洲免费黄色录像| 国产丝袜在线播放| 亚洲欧美偷拍三级| 在线电影看在线一区二区三区| 亚欧在线观看视频| 国产91精品入口| 91久久久久久久久久久| 波多野结衣高清在线| 午夜亚洲视频| 久久久视频免费观看| 日韩欧美中文字幕视频| 99精品综合| 日韩在线观看成人| 天堂av免费在线| 欧美伦理在线视频| 国产亚洲在线播放| 欧美熟妇激情一区二区三区| 国产精品羞羞答答在线观看| 亚洲电影免费观看高清| 日本精品一二三| 日韩欧美中文在线观看| 91精品国产福利| 无码人妻少妇色欲av一区二区| 精品久久国产一区| 日韩欧美亚洲国产另类| 在线成人精品视频| 东京久久高清| 亚洲国产精品一区二区三区| 日本不卡视频一区| 久久大胆人体视频| 日韩av在线网| 亚洲精品成人无码| japanese国产精品| 久久精品视频在线| 免费在线一级片| 亚洲经典自拍| 亚洲免费伊人电影| 日韩精品中文字幕久久臀| 日批在线观看视频| 日韩美女国产精品| 亚洲三级av在线| 黄色激情小视频| 亚洲精品久久久| 欧美精品久久久久久久久久| 国产精品久久久久久久妇| 国产精品试看| 国产欧美va欧美va香蕉在| 国产精品久久久国产盗摄| 国产一区二区导航在线播放| 国产成人免费观看| 国模精品一区二区| 国产精品福利在线播放| 视色,视色影院,视色影库,视色网| 男人天堂久久久| 亚洲午夜成aⅴ人片| 国产免费成人在线| 精品国产乱码久久久久久樱花| 亚洲成人av片| 日韩一级片在线免费观看| 正在播放日韩欧美一页| 欧美专区第一页| 亚洲一区中文字幕永久在线| 国产成人av福利| 日韩视频专区| 欧美激情午夜| 欧美日韩国内自拍| 天天影视色综合| 欧美激情极品| 久久精品亚洲94久久精品| 日韩av电影网| 久久99久久久久| 蜜桃麻豆www久久国产精品| 秋霞午夜在线观看| 疯狂欧美牲乱大交777| 中文字幕免费高清在线| 亚洲国产精品嫩草影院久久av| 久久国产一区二区三区| 91美女免费看| 国产一区二区在线电影| 欧美一区二区三区四区在线观看地址| 国产区在线观看| 色欧美片视频在线观看 | 天堂午夜影视日韩欧美一区二区| 成人黄色在线播放| 黄色av免费在线看| 亚洲.国产.中文慕字在线| 在线观看岛国av| 九热爱视频精品视频| 最近2019好看的中文字幕免费| 国产成人精品片| 福利91精品一区二区三区| 欧美裸体网站| 国产乱码午夜在线视频| 精品久久久久一区| 国产又色又爽又高潮免费| 欧美亚洲一级| 国产一区二区三区色淫影院| av文字幕在线观看| 欧美午夜电影在线播放| 久久国产精品影院| 一本色道久久综合亚洲精品不| 亚洲一区二区三区香蕉| 老司机午夜在线视频| 精品污污网站免费看| 中文字幕免费高清| 国产午夜久久| 精品欧美一区二区三区久久久| 最新国产在线拍揄自揄视频| 欧美色倩网站大全免费| 国产一区二区三区精品在线| 美日韩精品视频| 久久偷窥视频| 亚洲欧洲美洲av| 精品亚洲va在线va天堂资源站| 精品无码m3u8在线观看| 丁香婷婷深情五月亚洲| 免费网站永久免费观看| 日韩在线成人| 久久久久久久久久久成人| 亚洲产国偷v产偷v自拍涩爱| 亚洲精品日韩综合观看成人91| 国产精品久久久久久久av福利| 91欧美国产| 国产主播在线一区| 国产一级在线观看| 欧美天堂一区二区三区| 国产精品18在线| 精品亚洲porn| 狠狠精品干练久久久无码中文字幕| 国产区一区二| 久久伊人精品天天| 国产黄色片免费| 五月婷婷欧美视频| 亚欧洲乱码视频| 奇米色777欧美一区二区| 性欧美大战久久久久久久免费观看| 亚洲二区av| 欧美激情三级免费| 天堂资源最新在线| 在线观看www91| 蜜桃av.com| 国产盗摄视频一区二区三区| 欧美大片在线播放| 国产一区国产二区国产三区| 国产免费亚洲高清| 午夜伦理在线视频| 亚洲欧美国产高清va在线播| 亚洲熟妇无码久久精品| 亚洲在线中文字幕| 三级黄色片网站| 另类人妖一区二区av| 资源网第一页久久久| 国产精品任我爽爆在线播放| 国产成人在线视频| 182tv在线播放| 日韩福利视频在线观看| 五月天激情四射| 亚洲欧美自拍偷拍色图| 在线视频 日韩| 青青草国产精品亚洲专区无| 欧美图片激情小说| 日韩中出av| 91在线观看网站| 性欧美18一19sex性欧美| 久久伊人色综合| 男人av在线| 欧美变态口味重另类| 欧美亚洲另类小说| 伊人一区二区三区| 日本一级免费视频| 成人香蕉社区| 国产精品久久久久久久久久ktv| 91福利区在线观看| 欧美激情国产精品| 成人三级网址| 色黄久久久久久| 波多野结衣在线网站| 日韩精品亚洲视频| 无码精品人妻一区二区| 亚洲第一福利在线观看| 性网爆门事件集合av| 91精品免费在线观看| 一道本无吗一区| 在线看不卡av| 在线视频精品免费| 91国产精品成人| 秋霞av一区二区三区| 一本一本大道香蕉久在线精品| 国产精品乱子伦| 亚洲国产精品久久人人爱| 久久高清无码视频| 亚洲一级电影视频| 精品一区二区三区四| 亚洲国产视频网站| 国产成人无码精品久在线观看| 亚洲国产日韩在线一区模特| 国产精品theporn动漫| 一区二区三区av电影| 久久久久久免费观看| 亚洲成a人v欧美综合天堂下载| 日本少妇bbwbbw精品| 精品高清一区二区三区| 国产微拍精品一区| 黑人巨大精品欧美一区二区一视频| 中文字幕在线字幕中文| 欧美日韩在线第一页| 日韩一级在线视频| 在线精品视频免费观看| 91成品人影院| 欧美成人精品二区三区99精品| 丰满人妻熟女aⅴ一区| 日韩大片免费观看视频播放| 国产成人天天5g影院在线观看| 最近2019中文字幕mv免费看 | 亚洲美女视频一区| 黄色小视频在线免费看| 欧美午夜精品伦理| 中文字幕人妻一区二区在线视频| 4hu四虎永久在线影院成人| 国产成年妇视频| 日韩成人网免费视频| 国产福利在线看| 久久国产精品首页| 国产精品电影| 国产日韩欧美电影在线观看| 少妇精品在线| 久久久av水蜜桃| 婷婷综合亚洲| 久久视频这里有精品| 日韩激情一二三区| 日本人dh亚洲人ⅹxx| 久久亚洲一区二区三区明星换脸| 手机看片国产日韩| 亚洲国产日韩av| 中文字幕一区2区3区| 欧美不卡在线视频| 成年人在线观看| 欧美国产精品人人做人人爱| xxx欧美xxx| 51国产成人精品午夜福中文下载| 日韩欧美美女在线观看| 一本色道久久99精品综合| 亚洲免费黄色| 亚洲精品免费一区亚洲精品免费精品一区 | 女人av一区| 青青草综合视频| 日韩国产欧美视频| 国产激情视频网站| 亚洲男同1069视频| 最近国语视频在线观看免费播放| 精品免费日韩av| 一区二区三区视频网站| 91超碰caoporn97人人| 亚洲一区二区电影| 日韩欧美精品在线不卡| 亚洲人成久久| 欧美激情国内自拍| 亚洲国产高清在线| 九一国产在线观看| 欧美mv和日韩mv国产网站| av影片在线看| 欧美在线观看日本一区| 911亚洲精品| 欧美少妇一级片| 免费视频一区二区| 亚洲激情视频小说| 偷偷要91色婷婷| 丰满肥臀噗嗤啊x99av| 久久av.com| 六九午夜精品视频| 日韩动漫在线观看| 久久精品九九| 国产 中文 字幕 日韩 在线| 亚洲最大色网站| www.国产黄色| 欧美成人午夜剧场免费观看| 日本一区二区三区中文字幕| 日韩高清av| 天堂精品中文字幕在线| 97香蕉碰碰人妻国产欧美| 亚洲午夜久久久久中文字幕久| 国产农村妇女毛片精品| 久久亚洲精品网站| av在线精品| 在线视频精品一区| 精品在线免费视频| 一级性生活免费视频| 欧美久久一二区| 男人天堂久久久| 成人激情黄色网| 91精品成人| 亚洲911精品成人18网站| 亚洲欧洲综合另类| a级片在线播放| 欧美成人午夜剧场免费观看| 久久久久久久久久久久电影| 黄色a级在线观看| 精品写真视频在线观看| 在线看的片片片免费| 日韩一区二区三区电影| av毛片在线| 国产精品久久久一区二区三区| 亚洲午夜视频| 色天使在线视频| 色婷婷狠狠综合| 五月香视频在线观看| 成人乱人伦精品视频在线观看| 亚洲午夜精品一区 二区 三区| 波多野结衣免费观看| 亚洲成a人片在线不卡一二三区| 四虎影视精品成人| 国产精品xxxxx| 国产电影一区二区在线观看| 中文在线字幕观看| 欧美视频国产精品| av在线之家电影网站| 92国产精品久久久久首页| 在线成人h网| 无码少妇一区二区| 欧美一区二区三区色| 国产高潮在线| 亚洲国产欧美日韩| 国产精品乡下勾搭老头1| 国产精品1000| 国产亚洲欧美日韩一区二区| 超碰国产精品一区二页| 成人免费播放器| 国产精品欧美一区喷水| 国产成人精品白浆久久69| **欧美日韩vr在线| 国产精品97| 国产又粗又长又爽| 欧美另类z0zxhd电影| 国产探花视频在线观看| 亚洲高清不卡一区| 不卡的电视剧免费网站有什么| 波多野结衣一本一道| 精品少妇一区二区30p| 亚洲桃色综合影院| 性生活一级大片| 91国产丝袜在线播放| 国产啊啊啊视频在线观看| 亚洲图片都市激情| 久久这里只有精品6| 国产色在线视频| 国产精品18久久久久久首页狼| 亚洲天天综合|