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

并發(fā)扣款,如何保證一致性?

精選
開(kāi)發(fā)
同一個(gè)用戶在并發(fā)“查詢,邏輯計(jì)算,扣款”的情況下,余額可能出現(xiàn)不一致,有什么優(yōu)化方法么?今天和大家聊一聊這個(gè)問(wèn)題。

?有朋友問(wèn)我:

沈老師,我們有個(gè)業(yè)務(wù),同一個(gè)用戶在并發(fā)“查詢,邏輯計(jì)算,扣款”的情況下,余額可能出現(xiàn)不一致,請(qǐng)問(wèn)有什么優(yōu)化方法么?

今天和大家聊一聊這個(gè)問(wèn)題。

畫外音:文章較長(zhǎng),建議提前收藏。

問(wèn)題一:用戶扣款的業(yè)務(wù)場(chǎng)景是怎樣的??

用戶購(gòu)買商品的過(guò)程中,要對(duì)余額進(jìn)行查詢與修改,大致的業(yè)務(wù)流程如下:

第一步,從數(shù)據(jù)庫(kù)查詢用戶現(xiàn)有余額:

SELECT money FROM t_yue WHERE uid=$uid;

不妨設(shè)查詢出來(lái)的$old_money=100元。

第二步,業(yè)務(wù)層實(shí)施業(yè)務(wù)邏輯計(jì)算,比如:

(1)先查詢購(gòu)買商品的價(jià)格,例如是80元;

(2)再查詢產(chǎn)品是否有活動(dòng),以及活動(dòng)折扣,例如是9折;

(3)比對(duì)余額是否足夠,足夠時(shí)才往下走;

if($old_money> 80*0.9){
$new_money=$old_money-80*0.9=28
} else {
return "Not enough minerals";
}

第三步,將數(shù)據(jù)庫(kù)中的余額進(jìn)行修改。

UPDATE t_yue SET money=$new_money 
WHERE uid=$uid;

在并發(fā)量低的情況下,這個(gè)流程沒(méi)有任何問(wèn)題,原有金額100元,購(gòu)買了80元的九折商品(72元),剩余28元。

問(wèn)題二:同一個(gè)用戶,并發(fā)扣款可能出現(xiàn)什么問(wèn)題?

在分布式環(huán)境中,如果并發(fā)量很大,這種“查詢+修改”的業(yè)務(wù)有一定概率出現(xiàn)數(shù)據(jù)不一致。

極限情況下,可能出現(xiàn)這樣的異常流程:

步驟一,業(yè)務(wù)1和業(yè)務(wù)2并發(fā)查詢余額,是100元。

圖片

畫外音:這些并發(fā)查詢,是在不同的站點(diǎn)實(shí)例/服務(wù)實(shí)例上完成的,進(jìn)程內(nèi)互斥鎖肯定解決不了。

步驟二,業(yè)務(wù)1和業(yè)務(wù)2并發(fā)進(jìn)行邏輯計(jì)算,算出各自業(yè)務(wù)的余額,假設(shè)業(yè)務(wù)1算出的余額是28元,業(yè)務(wù)2算出的余額是38元。

圖片

步驟三,業(yè)務(wù)1對(duì)數(shù)據(jù)庫(kù)中的余額先進(jìn)行修改,設(shè)置成28元。

業(yè)務(wù)2對(duì)數(shù)據(jù)庫(kù)中的余額后進(jìn)行修改,設(shè)置成38元。

圖片

此時(shí)異常出現(xiàn)了,原有金額100元,業(yè)務(wù)1扣除了72元,業(yè)務(wù)2扣除了62元,最后剩余38元。畫外音:假設(shè)業(yè)務(wù)1先寫回余額,業(yè)務(wù)2再寫回余額。

問(wèn)題三:有什么常見(jiàn)的解決方案?

對(duì)于此案例,同一個(gè)用戶,并發(fā)扣款時(shí),有小概率會(huì)出現(xiàn)異常,可以對(duì)每一個(gè)用戶進(jìn)行分布式鎖互斥,例如:在redis/zk里搶到一個(gè)key才能繼續(xù)操作,否則禁止操作。

這種悲觀鎖方案確實(shí)可行,但要引入額外的組件(redis/zk),并且會(huì)降低吞吐量。對(duì)于小概率的不一致,有沒(méi)有樂(lè)觀鎖的方案呢?

對(duì)并發(fā)扣款進(jìn)行進(jìn)一步的分析發(fā)現(xiàn):

(1) 業(yè)務(wù)1寫回時(shí),舊余額100,這是一個(gè)初始狀態(tài);新余額28,這是一個(gè)結(jié)束狀態(tài)。理論上只有在舊余額為100時(shí),新余額才應(yīng)該寫回成功。

而業(yè)務(wù)1并發(fā)寫回時(shí),舊余額確實(shí)是100,理應(yīng)寫回成功。

(2) 業(yè)務(wù)2寫回時(shí),舊余額100,這是一個(gè)初始狀態(tài);新余額28,這是一個(gè)結(jié)束狀態(tài)。理論上只有在舊余額為100時(shí),新余額才應(yīng)該寫回成功。

可實(shí)際上,這個(gè)時(shí)候數(shù)據(jù)庫(kù)中的金額已經(jīng)變?yōu)?8了,所以業(yè)務(wù)2的并發(fā)寫回,不應(yīng)該成功。

如何低成本實(shí)施樂(lè)觀鎖?

在set寫回的時(shí)候,加上初始狀態(tài)的條件compare,只有初始狀態(tài)不變時(shí),才允許set寫回成功,Compare And Set(CAS),是一種常見(jiàn)的降低讀寫鎖沖突,保證數(shù)據(jù)一致性的方法。

此時(shí)業(yè)務(wù)要怎么改?

使用CAS解決高并發(fā)時(shí)數(shù)據(jù)一致性問(wèn)題,只需要在進(jìn)行set操作時(shí),compare初始值,如果初始值變換,不允許set成功。

具體到這個(gè)case,只需要將:

UPDATE t_yue SET money=$new_money 

WHERE uid=$uid;

升級(jí)為:

UPDATE t_yue SET money=$new_money 

WHERE uid=$uid AND money=$old_money;

即可。

并發(fā)操作發(fā)生時(shí):

業(yè)務(wù)1執(zhí)行:

UPDATE t_yue SET money=28 

WHERE uid=$uid AND money=100;

業(yè)務(wù)2執(zhí)行:

UPDATE t_yue SET money=38 

WHERE uid=$uid AND money=100;

這兩個(gè)操作同時(shí)進(jìn)行時(shí),只可能有一個(gè)執(zhí)行成功。

怎么判斷哪個(gè)并發(fā)執(zhí)行成功,哪個(gè)并發(fā)執(zhí)行失敗呢?

set操作,其實(shí)無(wú)所謂成功或者失敗,業(yè)務(wù)能通過(guò)affect rows來(lái)判斷:

  • 寫回成功的,affect rows為1;
  • 寫回失敗的,affect rows為0;

高并發(fā)“查詢并修改”的場(chǎng)景,可以用CAS(Compare and Set)的方式解決數(shù)據(jù)一致性問(wèn)題。對(duì)應(yīng)到業(yè)務(wù),即在set的時(shí)候,加上初始條件的比對(duì)即可。

優(yōu)化不難,只改了半行SQL,但確實(shí)能解決問(wèn)題。

問(wèn)題四:能不能使用直接扣減的方法

UPDATE t_yue SET money=money-$diff 

WHERE uid=$uid;

來(lái)進(jìn)行余額扣減?

明顯不行,在并發(fā)情況下,會(huì)將money扣成負(fù)數(shù)。

問(wèn)題五:為了保證余額不被扣成負(fù)數(shù),再加一個(gè)where條件:

UPDATE t_yue SET money=money-$diff 
WHERE uid=$uid AND money-$diff>0;

這樣是否可行?

很遺憾,仍然不行。

這個(gè)方案不冪等。

那什么是冪等性??

聊冪等性之前,先看另一個(gè)測(cè)試用例的case。

假設(shè)有一個(gè)服務(wù)接口,注冊(cè)新用戶:

bool RegisterUser($uid, $name){

//查看uid是否已經(jīng)存在

select uid from t_user where uid=$uid;

//不是新用戶,返回失敗

if(rows>0)return false;

else{

//把新用戶插入用戶表
insert into t_user values($uid, $name);
//返回成功
return true;
}
}

有一個(gè)測(cè)試工程師,對(duì)該接口寫了一個(gè)測(cè)試用例:

bool TestCase_RegisterUser(){
//造一些假數(shù)據(jù)
long uid=123;
String name='shenjian';
//調(diào)用被測(cè)試的接口
bool result= RegisterUser(uid,name);
//預(yù)期注冊(cè)成功,對(duì)結(jié)果進(jìn)行斷言判斷
Assert(result,true);
//返回測(cè)試結(jié)果
return result;
}

這是不是一個(gè)好的測(cè)試用例?這個(gè)用例存在什么問(wèn)題?

你會(huì)發(fā)現(xiàn),相同條件下,這個(gè)測(cè)試用例執(zhí)行兩次,得到的結(jié)果不一樣:

  • 第一次執(zhí)行,第一次造數(shù)據(jù),調(diào)用接口,注冊(cè)成功;
  • 第二次執(zhí)行,又造了一次相同的數(shù)據(jù),調(diào)用接口,注冊(cè)會(huì)失??;

這不是一個(gè)好的測(cè)試用例,多次執(zhí)行結(jié)果不同。

什么是冪等性??

相同條件下,執(zhí)行同一請(qǐng)求,得到的結(jié)果相同,才符合冪等性。

畫外音:Google一下,比我解釋得更好,但意思應(yīng)該說(shuō)清楚了。

如何將上面的測(cè)試用例改為符合“冪等性”的測(cè)試用例呢??

只需要加一行代碼:

bool TestCase_RegisterUser(){
//造一些假數(shù)據(jù)
long uid=123;
String name=’shenjian’;
//先刪除這個(gè)偽造的用戶
DeleteUser(uid);
//調(diào)用被測(cè)試的接口
bool result= RegisterUser(uid,name);
//預(yù)期注冊(cè)成功,對(duì)結(jié)果進(jìn)行斷言判斷
Assert(result,true);
//返回測(cè)試結(jié)果
return result;
}

這樣,在相同條件下,不管這個(gè)用例執(zhí)行多少次,得到的測(cè)試結(jié)果都是相同的。

讀請(qǐng)求,一般是冪等的。

寫請(qǐng)求,視情況而定:

  • insert x,一般來(lái)說(shuō)不是冪等的,重復(fù)插入得到的結(jié)果不一定一樣;
  • delete x,一般來(lái)說(shuō)是冪等的,刪除多次得到的結(jié)果仍相同;
  • set a=x是冪等的;
  • set a=a-x不是冪等的;

因此,這么扣減余額:

UPDATE t_yue SET money=$new_money 

WHERE uid=$uid AND money=$old_money;

是冪等操作。

要是這么扣減余額:

UPDATE t_yue SET money=money-$diff 

WHERE uid=$uid AND money-$diff>0;

不是冪等操作。

聊到這里,或許有朋友要抬杠了,測(cè)試用例會(huì)重復(fù)執(zhí)行,扣款怎么會(huì)重復(fù)執(zhí)行呢?

重試。?

重試,是異常處理里很常見(jiàn)的手段。

你在寫業(yè)務(wù)的時(shí)候有沒(méi)有寫過(guò)這樣的代碼:

result = DoSomething();
if(false==result || TIMEOUT){
//錯(cuò)誤,或者超時(shí),重試一次
result= DoSomething();
}
return result;

當(dāng)然,又會(huì)有朋友抬杠了,我從來(lái)不重試!??!

畫外音:額,這是合格,還是不合格呢?

你可以決定業(yè)務(wù)代碼怎么寫,你不能決定底層框架代碼怎么寫:

  • 站點(diǎn)框架有沒(méi)有自動(dòng)重試?
  • 服務(wù)框架有沒(méi)有自動(dòng)重試?
  • 服務(wù)連接池,數(shù)據(jù)庫(kù)連接池有沒(méi)有自動(dòng)重試?

畫外音:

  • 服務(wù)化分層的架構(gòu)中,建議只入口層重試,服務(wù)層不要重試,防止雪崩;
  • dubbo底層,調(diào)用超時(shí)是默認(rèn)重試的,這個(gè)設(shè)計(jì)不好;?

因此,在有重試的架構(gòu)體系里,冪等性是需要考慮的一個(gè)問(wèn)題。

因此,扣款和充值業(yè)務(wù),一般使用:

select&set,配合CAS方案

而不使用:

set money-=X方案

問(wèn)題五:CAS方案,會(huì)不會(huì)存在ABA問(wèn)題?

什么是ABA問(wèn)題?

CAS樂(lè)觀鎖機(jī)制確實(shí)能夠提升吞吐,并保證一致性,但在極端情況下可能會(huì)出現(xiàn)ABA問(wèn)題。

考慮如下操作:

  • 并發(fā)1(上):獲取出數(shù)據(jù)的初始值是A,后續(xù)計(jì)劃實(shí)施CAS樂(lè)觀鎖,期望數(shù)據(jù)仍是A的時(shí)候,修改才能成功
  • 并發(fā)2:將數(shù)據(jù)修改成B
  • 并發(fā)3:將數(shù)據(jù)修改回A
  • 并發(fā)1(下):CAS樂(lè)觀鎖,檢測(cè)發(fā)現(xiàn)初始值還是A,進(jìn)行數(shù)據(jù)修改

上述并發(fā)環(huán)境下,并發(fā)1在修改數(shù)據(jù)時(shí),雖然還是A,但已經(jīng)不是初始條件的A了,中間發(fā)生了A變B,B又變A的變化,此A已經(jīng)非彼A,數(shù)據(jù)卻成功修改,可能導(dǎo)致錯(cuò)誤,這就是CAS引發(fā)的所謂的ABA問(wèn)題。

余額操作,出現(xiàn)ABA問(wèn)題并不會(huì)對(duì)業(yè)務(wù)產(chǎn)生影響,因?yàn)閷?duì)于“余額”屬性來(lái)說(shuō),前一個(gè)A為100余額,與后一個(gè)A為100余額,本質(zhì)是相同的。

但其他場(chǎng)景未必是這樣,舉一個(gè)堆棧操作的例子:

圖片

并發(fā)1(上):讀取棧頂?shù)脑貫椤癆1”

圖片

并發(fā)2:進(jìn)行了2次出棧

圖片

并發(fā)3:又進(jìn)行了1次出棧

并發(fā)1(下):實(shí)施CAS樂(lè)觀鎖,發(fā)現(xiàn)棧頂還是“A1”,于是修改為A2

圖片

此時(shí)會(huì)出現(xiàn)系統(tǒng)錯(cuò)誤,因?yàn)榇恕癆1”非彼“A1”

ABA問(wèn)題可以怎么優(yōu)化?

ABA問(wèn)題導(dǎo)致的原因,是CAS過(guò)程中只簡(jiǎn)單進(jìn)行了“值”的校驗(yàn),在有些情況下,“值”相同不會(huì)引入錯(cuò)誤的業(yè)務(wù)邏輯(例如余額),有些情況下,“值”雖然相同,卻已經(jīng)不是原來(lái)的數(shù)據(jù)了(例如堆棧)。

因此,CAS不能只比對(duì)“值”,還必須確保是原來(lái)的數(shù)據(jù),才能修改成功。

常見(jiàn)的實(shí)踐是,將“值”比對(duì),升級(jí)為“版本號(hào)”的比對(duì),一個(gè)數(shù)據(jù)一個(gè)版本,版本變化,即使值相同,也不應(yīng)該修改成功。

余額并發(fā)讀寫例子,引入版本號(hào)的具體實(shí)踐如下:

(1) 余額表要升級(jí)。

t_yue(uid, money)

升級(jí)為:

t_yue(uid, money, version)

(2) 查詢余額時(shí),同時(shí)查詢版本號(hào)。

SELECT money FROM t_yue WHERE sid=$sid

升級(jí)為:

SELECT money,version FROM t_yue WHERE sid=$sid

假設(shè)有并發(fā)操作,都會(huì)將版本號(hào)查詢出來(lái)

(3) 設(shè)置余額時(shí),必須版本號(hào)相同,并且版本號(hào)要修改。

舊版本“值”比對(duì):

UPDATE t_yue SET money=38 
WHERE uid=$uid AND money=100

升級(jí)為“版本號(hào)”比對(duì):

UPDATE t_yue SET money=38, version=$version_new 
WHERE uid=$uid AND version=$version_old

此時(shí)假設(shè)有并發(fā)操作,首先操作的請(qǐng)求會(huì)修改版本號(hào),并發(fā)操作會(huì)執(zhí)行失敗。

畫外音:version通用,本例是強(qiáng)行用version舉例而已,實(shí)際上本例可以用余額“值”比對(duì)。

總結(jié)?

  • select&set業(yè)務(wù)場(chǎng)景,在并發(fā)時(shí)會(huì)出現(xiàn)一致性問(wèn)題
  • 冪等性是一個(gè)需要考慮的問(wèn)題
  • 基于“值”的CAS樂(lè)觀鎖,可能導(dǎo)致ABA問(wèn)題
  • CAS樂(lè)觀鎖,必須保證修改時(shí)的“此數(shù)據(jù)”就是“彼數(shù)據(jù)”,應(yīng)該由“值”比對(duì),優(yōu)化為“版本號(hào)”比對(duì)

思路比結(jié)論重要。?

責(zé)任編輯:趙寧寧
相關(guān)推薦

2024-01-10 08:01:55

高并發(fā)場(chǎng)景悲觀鎖

2019-08-30 12:46:10

并發(fā)扣款查詢SQL

2024-12-26 15:01:29

2020-08-05 08:46:10

NFS網(wǎng)絡(luò)文件系統(tǒng)

2025-03-27 08:20:54

2023-09-07 08:11:24

Redis管道機(jī)制

2019-09-08 22:45:48

并發(fā)扣款一致性冪等性

2020-06-01 22:09:48

緩存緩存同步緩存誤用

2021-03-04 06:49:53

RocketMQ事務(wù)

2024-08-20 16:13:52

2023-05-26 07:34:50

RedisMySQL緩存

2023-12-11 12:27:31

并發(fā)Zookeeper數(shù)據(jù)

2019-09-05 08:54:38

一致性CASABA

2021-07-21 15:50:42

Serverless 業(yè)務(wù)部署

2021-12-14 07:15:57

MySQLRedis數(shù)據(jù)

2019-10-16 00:06:08

CPU內(nèi)存存儲(chǔ)

2020-04-01 15:50:17

TiDBMySQL數(shù)據(jù)庫(kù)

2024-10-28 12:41:25

2024-01-22 08:52:00

AQS雙異步數(shù)據(jù)一致性

2024-01-15 10:38:20

多級(jí)緩存數(shù)據(jù)一致性分布式緩存
點(diǎn)贊
收藏

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

亚洲精品怡红院| 欧美一区二区三区在线免费观看| 成人免费毛片xxx| 国产一区二区三区不卡av| 欧美性xxxxx极品娇小| 亚洲精品一区二区三区樱花| 亚洲av少妇一区二区在线观看 | 啊啊啊一区二区| jizz在线观看中文| 成人av电影在线| 国产精品一香蕉国产线看观看| 免费一级黄色大片| 欧美综合在线视频观看| 欧美一区三区四区| jizz欧美激情18| av在线网页| 成人免费一区二区三区在线观看| 国产伦精品一区二区三区四区视频| 黄色污污网站在线观看| 亚洲一级电影| 久久国产一区二区三区| 亚洲一区二区观看| 亚洲精品一区二区三区中文字幕| 日韩欧美主播在线| 阿v天堂2018| 成人福利片网站| 欧美国产视频在线| 久久久一本精品99久久精品| 亚洲成人久久精品| 韩日欧美一区二区三区| 国产精品伦子伦免费视频| 中文字幕在线观看视频网站| 国产精品草草| 欧美xxxx综合视频| 国产视频精品免费| 欧美老女人另类| 亚洲人成电影在线观看天堂色| 挪威xxxx性hd极品| 中文字幕一区二区三区中文字幕| 制服丝袜亚洲播放| 一级黄色特级片| 国产一区二区三区影视| 色拍拍在线精品视频8848| 日本a在线免费观看| 青草青在线视频| 亚洲欧美国产毛片在线| 少妇熟女一区二区| 欧美日本一道| 综合电影一区二区三区 | 国内自拍偷拍视频| 欧美激情精品| 日韩写真欧美这视频| 午夜xxxxx| 日本精品视频| 欧美精品一区二| 国产大学生视频| 老牛国内精品亚洲成av人片| 亚洲第一天堂av| 中国黄色片视频| 精品国产一区二区三区不卡蜜臂| 精品乱码亚洲一区二区不卡| 88av在线播放| 香蕉国产成人午夜av影院| 亚洲精品一区久久久久久| 午夜一区二区三区免费| 亚洲综合小说图片| 中文字幕亚洲欧美日韩2019| 五月激情四射婷婷| 午夜欧美在线| 久久久久在线观看| 国产精品久久久久久久久久久久久久久久久 | 国产精自产拍久久久久久| 中文字幕一区2区3区| 久久精品久久精品| 亚洲a级在线观看| 天堂在线观看免费视频| 国产午夜精品一区二区三区嫩草| 日韩欧美一区二区三区四区| 欧美精品电影| 亚洲第一主播视频| 日韩视频在线免费看| 欧美一级在线| 亚洲精品一区二区三区福利| 久久久久久九九九九九| 99精品综合| 午夜免费日韩视频| 依依成人在线视频| 成人午夜看片网址| 日韩aⅴ视频一区二区三区| 免费在线午夜视频| 精品国产福利在线| 日本一二区免费| 欧美激情99| 精品国产拍在线观看| 日韩三级小视频| 麻豆精品视频在线观看免费| 国产精品自拍首页| 91涩漫在线观看| 五月天精品一区二区三区| 性生交免费视频| 福利片在线一区二区| 最近更新的2019中文字幕| 国产一级在线播放| 精品亚洲aⅴ乱码一区二区三区| 国产精品一区二区三区四区五区| av在线首页| 欧美日韩久久久久| 中文字幕avav| 久久激情电影| 欧洲日韩成人av| 亚洲精品国产精品国| 中文字幕巨乱亚洲| 久久网站免费视频| 粉嫩精品导航导航| 久久久国产一区二区| 看黄色一级大片| 99免费精品在线| 日本福利视频网站| 亚洲伦理一区二区| 一区二区三区黄色| 在线观看日韩中文字幕| 国产不卡视频一区二区三区| 中文字幕中文字幕99| 亚洲综合av一区二区三区| 亚洲黄在线观看| 久视频在线观看| 国产一区二区成人久久免费影院| 视频三区二区一区| 午夜精品久久久久久久久久蜜桃| 亚洲国产小视频| 一区二区三区免费高清视频 | 色综合av在线| 成人免费av片| 99在线精品视频在线观看| 国产精品久久7| 国产又色又爽又黄刺激在线视频| 日韩视频不卡中文| 日本少妇高清视频| 国产一区二区三区美女| 在线成人性视频| 成人在线日韩| 久久亚洲精品网站| 国产精品区在线观看| 国产精品久久一卡二卡| 在线免费观看视频黄| 成人在线国产| 国产精品爽黄69天堂a| 成人三级黄色免费网站| 欧美日韩免费观看一区二区三区| 摸摸摸bbb毛毛毛片| 日韩专区中文字幕一区二区| 欧美一区激情视频在线观看| 日韩成人影音| 日韩视频在线一区| 99久久精品国产色欲| 亚洲伦在线观看| 国产成人精品一区二区在线小狼 | 欧美国产不卡| 欧洲成人免费视频| aaa日本高清在线播放免费观看| 欧美午夜寂寞影院| 色欲一区二区三区精品a片| 久草中文综合在线| av在线播放天堂| 日韩大胆成人| 精品欧美一区二区在线观看| 亚洲一区二区四区蜜桃| 中文字幕乱码一区二区三区| 狂野欧美性猛交xxxx| 最近2019中文免费高清视频观看www99| 天天天天天天天干| 国产精品视频麻豆| 伊人国产精品视频| 亚洲精品社区| 日韩av高清| 亚洲一区有码| 久久久综合av| 高清日韩av电影| 91精品国产综合久久精品麻豆| 久久久久成人片免费观看蜜芽| 成人av在线电影| 成人三级视频在线播放| 日韩dvd碟片| 国产精品一区免费观看| 亚洲成人不卡| 精品中文字幕在线| 日韩av成人| 91精品国产综合久久小美女| 日韩av在线播| 中文字幕精品在线不卡| 美女日批在线观看| 久久中文精品| 米仓穗香在线观看| 免费视频一区三区| 成人黄色在线免费观看| 成人日韩精品| 91国产视频在线| 免费不卡视频| 国产婷婷97碰碰久久人人蜜臀| 91禁在线观看| 日韩欧美在线视频日韩欧美在线视频| 开心激情五月网| 久久综合九色综合97婷婷女人| 亚洲无在线观看| 久久精品天堂| 欧美黄网在线观看| 日本久久一二三四| 久久精品国产精品国产精品污 | 一本一道久久综合狠狠老精东影业| 色999五月色| 欧美一性一交| 91精品免费| 日韩美香港a一级毛片| 欧美一级淫片aaaaaaa视频| 性欧美ⅴideo另类hd| 中文字幕亚洲第一| 欧美日韩国产综合视频| 亚洲国产精品va| 成人午夜精品福利免费| 欧美欧美午夜aⅴ在线观看| 黄色在线观看国产| 亚洲国产精品一区二区尤物区| 97精品在线播放| 日本一区二区免费在线| 伊人网伊人影院| 99视频精品全部免费在线| 日本泡妞xxxx免费视频软件| 久久电影网站中文字幕| 日本va中文字幕| 亚洲高清免费| 日韩精品综合在线| 欧美久色视频| 米仓穗香在线观看| 欧美99在线视频观看| 日本一级淫片演员| 99精品在线观看| 自拍偷拍视频在线| 久久久久国产精品| 久久天天东北熟女毛茸茸| 99久久婷婷这里只有精品 | 欧美大片一区| 无颜之月在线看| 欧美日韩爆操| 人妻少妇精品久久| 在线免费高清一区二区三区| 隔壁人妻偷人bd中字| 激情综合电影网| 精品久久久久久无码中文野结衣| 伊人影院久久| 亚洲熟妇av日韩熟妇在线| 一区二区三区福利| 免费在线观看毛片网站| 日本不卡一二三区黄网| 一级黄色特级片| 国产精品亚洲专一区二区三区 | 精品国产美女在线| www在线观看播放免费视频日本| 久久亚洲私人国产精品va| 羞羞污视频在线观看| 性视频1819p久久| 电影网一区二区| 国产精品美女免费看| 日韩在线电影| 99国产超薄丝袜足j在线观看| 激情av综合| 日本不卡一区| 91精品天堂福利在线观看| 国产精品88久久久久久妇女| 在线观看一区| 色一情一乱一伦一区二区三区日本 | 中文字幕第一区| 艳妇荡乳欲伦69影片| 亚洲午夜久久久久久久久电影网 | 欧美伊人久久大香线蕉综合69| 亚洲一二区视频| 日韩三级视频在线观看| 天堂在线中文| 日韩一级黄色av| a天堂资源在线| 国产精品欧美日韩| 午夜久久av| 日韩三级电影| 国产精品a级| 久久久久久三级| 国产成人免费在线视频| 成人乱码一区二区三区av| 最新日韩在线视频| 麻豆久久久久久久久久| 欧美精品自拍偷拍动漫精品| 日韩中文字幕免费在线观看| 尤物tv国产一区| 免费看电影在线| 国产成人精品综合| 中文在线免费一区三区| 亚洲人成77777| 一本久道久久久| 污污的视频免费观看| 99精品视频在线免费观看| 99国产精品无码| 欧美日韩在线视频一区二区| 国产精品天天操| 亚洲欧美日韩网| 黄网av在线| 91亚洲精品一区| 精品国产一区探花在线观看| 97超碰国产精品| 麻豆91在线播放| 极品粉嫩小仙女高潮喷水久久| 自拍偷拍欧美激情| japanese国产在线观看| 日韩精品高清在线| 波多野在线观看| 亚洲一区二区少妇| 久久国产影院| 手机看片福利日韩| 99久久精品国产精品久久| a级黄色片免费看| 欧美精品久久一区| √新版天堂资源在线资源| 欧美在线激情视频| 国偷自产av一区二区三区| 91免费视频黄| 极品少妇xxxx偷拍精品少妇| 亚洲性猛交xxxx乱大交| 五月天激情综合| 天堂国产一区二区三区| 高清欧美性猛交xxxx| 亚洲一区电影| 99久久99久久精品| 国产一区二区三区在线观看精品 | av二区在线| 国产精品视频永久免费播放| 色棕色天天综合网| 哪个网站能看毛片| www国产成人| 六月丁香激情综合| 国产视频久久久久| 韩国成人漫画| 免费在线观看91| 销魂美女一区二区三区视频在线| 精品人妻一区二区三区香蕉| 天天操天天干天天综合网| 少妇人妻一区二区| 国产91精品不卡视频| 亚洲成人一品| 午夜激情福利在线| 国产精品你懂的在线| 在线免费av片| 久久亚洲春色中文字幕| 日本成人手机在线| 久久99中文字幕| 久久这里只有精品6| 激情网站在线观看| 中文字幕在线成人| 精品午夜视频| av在线播放天堂| 久久人人爽人人爽| 免费黄色一级大片| 不卡av电影在线观看| 91精品国产自产精品男人的天堂 | 中文字幕乱码中文乱码51精品| 欧美日韩高清免费| 麻豆成人免费电影| 国产精品视频一区二区三 | 中文字幕av亚洲精品一部二部| 一区二区三区国产好的精华液| 亚洲一区在线观看免费| 婷婷久久久久久| 国产精品自在线| 欧美先锋影音| 久久精品国产亚洲AV熟女| 欧美日韩视频第一区| 91在线中文| 久久久久久久免费| 男女激情视频一区| 久久这里只有精品国产| 亚洲欧美制服第一页| 青娱乐极品盛宴一区二区| 久久久久久av无码免费网站下载| caoporn国产一区二区| 中文字幕 欧美激情| 欧美日韩高清区| 免费精品国产| 四虎国产精品永久免费观看视频| 精品国产1区2区| 欧美极品视频| 蜜桃成人在线| 国产精品12区| 天堂网一区二区| 欧美高清性猛交| 欧美国产美女| 91视频啊啊啊| 日韩欧美一区在线| 成人涩涩视频| 亚洲熟妇av日韩熟妇在线| 成人免费一区二区三区视频 | 国产一区二区三区在线观看| 91chinesevideo永久地址| 99精品视频精品精品视频 | 狠狠做深爱婷婷综合一区|