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

分布式鎖+事務(wù)=災難?不要把鎖加在事務(wù)內(nèi)!!!

數(shù)據(jù)庫
分布式鎖和事務(wù)就像一對歡喜冤家,既相互依賴,又相互排斥。鎖可以保證數(shù)據(jù)的一致性,但如果用錯了地方,就會成為性能瓶頸。

兄弟們,最近有個電商朋友跟我哭訴,他們搞了個茅臺搶購活動,結(jié)果系統(tǒng)直接炸鍋了。用戶瘋狂下單,庫存直接被扣成了負數(shù),客服電話被打爆,技術(shù)團隊連夜搶修。我問他用了什么防超賣方案,他說:"我用了分布式鎖啊!在扣庫存的方法上加了 @Transactional 注解,然后用 Redisson 的 RLock 鎖住商品 ID,應(yīng)該萬無一失啊!"

我心里咯噔一下,這場景我太熟悉了。就像你在超市推了個購物車去排隊結(jié)賬,結(jié)果購物車太大卡在通道里,后面的人都走不動。鎖加在事務(wù)里,就像把購物車(鎖)和結(jié)賬流程(事務(wù))綁在一起,一旦事務(wù)執(zhí)行時間長,鎖就成了性能瓶頸。

一、鎖在事務(wù)里:穿著棉襖游泳的痛苦

1. 鎖的持有時間過長

假設(shè)你的事務(wù)里有三個操作:查庫存、扣庫存、發(fā)消息。每個操作都需要 100ms,事務(wù)總時長 300ms。而鎖的超時時間設(shè)置為 500ms,看起來沒問題。但如果數(shù)據(jù)庫突然慢了,事務(wù)執(zhí)行了 800ms,鎖就會自動釋放。這時候另一個線程拿到鎖,繼續(xù)扣庫存,就會導致超賣。

這就像你租了個充電寶,租期 2 小時,但你用了 3 小時才還。中間第二個小時的時候,充電寶被別人借走了,你還的時候發(fā)現(xiàn)已經(jīng)被別人還了,結(jié)果你被扣了雙倍租金。

2. 事務(wù)回滾導致鎖無法釋放

如果事務(wù)執(zhí)行過程中拋出異常回滾,鎖會被釋放嗎?答案是不一定。比如你用 Redis 的 SETNX 加鎖,沒有設(shè)置過期時間,事務(wù)回滾時忘記手動釋放鎖,這個鎖就會一直存在,導致其他線程永遠無法獲取鎖。

這就像你在酒店退房時,把房卡忘在房間里,后面的客人就無法入住了。

3. 數(shù)據(jù)庫隔離級別的坑

如果你用的是 MySQL 的可重復讀隔離級別,在事務(wù)內(nèi)查詢庫存時,其他事務(wù)的修改是不可見的。但如果鎖在事務(wù)內(nèi),其他事務(wù)可能在鎖釋放后修改庫存,導致數(shù)據(jù)不一致。

這就像你在餐廳吃飯,點了一份牛排,結(jié)果服務(wù)員告訴你已經(jīng)賣完了。你剛要走,另一個服務(wù)員又端來一份牛排,說剛才查錯了。

二、正確的姿勢:鎖在事務(wù)外,事務(wù)在鎖內(nèi)

1. 先鎖后事務(wù)

正確的做法是先獲取鎖,再開啟事務(wù)。這樣鎖的持有時間只包括事務(wù)內(nèi)的操作,而不是整個方法的執(zhí)行時間。

RLock lock = redisson.getLock("product_123");
try {
    lock.lock(); // 先獲取鎖
    // 開啟事務(wù)
    Product product = productRepository.findById(123).orElseThrow();
    if (product.getStock() > 0) {
        product.setStock(product.getStock() - 1);
        productRepository.save(product);
    }
} finally {
    lock.unlock(); // 釋放鎖
}

這樣,即使事務(wù)執(zhí)行時間長,鎖也會在事務(wù)結(jié)束后立即釋放,不會影響其他線程。

2. 鎖的粒度要細

不要鎖整個商品 ID,而是鎖具體的庫存項。比如按庫存批次加鎖,或者按 SKU 加鎖。這樣可以提高并發(fā)度,減少鎖競爭。

這就像你去銀行取錢,不是鎖整個銀行,而是鎖具體的 ATM 機。

3. 數(shù)據(jù)庫層面加唯一索引

為庫存表的商品 ID 加唯一索引,防止重復扣庫存。即使鎖被釋放,數(shù)據(jù)庫也能保證數(shù)據(jù)一致性。

ALTER TABLE product_stock ADD UNIQUE INDEX uk_product_id (product_id);

這樣,當多個線程同時扣庫存時,只有一個線程能成功插入或更新記錄,其他線程會收到唯一約束沖突的錯誤。

三、分布式鎖的選型:別用錘子釘釘子

1. Redis 分布式鎖:性能王者

Redis 的 SETNX+EXPIRE 命令可以實現(xiàn)分布式鎖,性能高,適合高并發(fā)場景。但要注意以下幾點:

  • 使用 Lua 腳本保證加鎖和設(shè)置超時時間的原子性
  • 鎖的 value 要設(shè)置為唯一標識,防止誤釋放
  • 集群模式下使用 Redlock 算法,避免腦裂問題
String luaScript = "if redis.call('setnx', KEYS[1], ARGV[1]) == 1 then " +
        "redis.call('expire', KEYS[1], ARGV[2]) return 1 else return 0 end";
List<String> keys = Collections.singletonList("lock_key");
List<String> argv = Arrays.asList("unique_value", "30");
Long result = jedis.eval(luaScript, keys, argv);

2. ZooKeeper 分布式鎖:可靠性之選

ZooKeeper 的臨時順序節(jié)點可以實現(xiàn)公平鎖,適合對可靠性要求高的場景。但性能較低,適合中低并發(fā)。

InterProcessMutex lock = new InterProcessMutex(client, "/locks/lock1");
try {
    lock.acquire();
    // 執(zhí)行業(yè)務(wù)邏輯
} finally {
    lock.release();
}

ZooKeeper 會自動處理節(jié)點的創(chuàng)建和刪除,即使客戶端宕機,臨時節(jié)點也會自動消失,避免死鎖。

3. 數(shù)據(jù)庫分布式鎖:簡單但不推薦

通過數(shù)據(jù)庫的唯一索引和行鎖實現(xiàn)分布式鎖,簡單易懂,但性能差,適合小型系統(tǒng)。

INSERT INTO lock_table (resource_id, lock_time) VALUES ('product_123', NOW()) 
ON DUPLICATE KEY UPDATE lock_time = NOW();

這種方法在高并發(fā)下會導致大量的鎖競爭,數(shù)據(jù)庫壓力大,不建議在生產(chǎn)環(huán)境中使用。

四、分布式事務(wù)的正確打開方式:別把鎖當萬能鑰匙

1. 避免分布式事務(wù)

能不用分布式事務(wù)就不用,盡量通過本地事務(wù)和消息隊列實現(xiàn)最終一致性。比如訂單服務(wù)扣庫存后,發(fā)送一條消息給庫存服務(wù),庫存服務(wù)異步更新庫存。

這就像你在淘寶下單后,支付寶異步通知商家發(fā)貨。

2. 使用 TCC 事務(wù)

TCC(Try-Confirm-Cancel)事務(wù)模型適合長事務(wù)場景。比如支付服務(wù)先凍結(jié)資金(Try),訂單服務(wù)扣庫存(Try),然后支付服務(wù)確認支付(Confirm),訂單服務(wù)確認發(fā)貨(Confirm)。如果任何一步失敗,都需要回滾(Cancel)。

// 支付服務(wù)
public void tryPay(String orderId, BigDecimal amount) {
    // 凍結(jié)資金
}
public void confirmPay(String orderId) {
    // 扣除資金
}
public void cancelPay(String orderId) {
    // 解凍資金
}
// 訂單服務(wù)
public void tryDeductStock(String orderId, String productId, int quantity) {
    // 鎖定庫存
}
public void confirmDeductStock(String orderId) {
    // 扣減庫存
}
public void cancelDeductStock(String orderId) {
    // 釋放庫存
}

3. 結(jié)合 Saga 模式

Saga 模式將長事務(wù)拆分為多個短事務(wù),每個短事務(wù)都有對應(yīng)的補償操作。如果某個短事務(wù)失敗,回滾之前的所有短事務(wù)。

比如用戶注冊流程:發(fā)送驗證碼(短事務(wù) 1)→ 創(chuàng)建用戶(短事務(wù) 2)→ 發(fā)送歡迎郵件(短事務(wù) 3)。如果創(chuàng)建用戶失敗,回滾發(fā)送驗證碼的操作。

五、常見誤區(qū):這些坑你踩過嗎?

1. 鎖的超時時間設(shè)置不合理

超時時間太短,會導致鎖頻繁釋放,增加重試次數(shù);太長,會影響并發(fā)度。應(yīng)該根據(jù)業(yè)務(wù)邏輯的平均執(zhí)行時間來設(shè)置,比如平均執(zhí)行時間的 1.5 倍。

這就像你設(shè)置自動關(guān)機時間,太短會導致工作沒保存,太長會浪費電。

2. 鎖的可重入性問題

如果同一個線程多次獲取同一把鎖,會導致死鎖。使用支持可重入的鎖,如 Redisson 的 RLock,或者在數(shù)據(jù)庫鎖表中記錄線程 ID。

// Redisson可重入鎖
RLock lock = redisson.getLock("product_123");
lock.lock();
try {
    // 執(zhí)行業(yè)務(wù)邏輯
    lock.lock(); // 可重入
    try {
        // 嵌套業(yè)務(wù)邏輯
    } finally {
        lock.unlock();
    }
} finally {
    lock.unlock();
}

3. 忽略網(wǎng)絡(luò)延遲的影響

在分布式系統(tǒng)中,網(wǎng)絡(luò)延遲是不可避免的。鎖的獲取和釋放可能會因為網(wǎng)絡(luò)問題失敗,需要設(shè)置重試機制。

int retryCount = 3;
int retryInterval = 1000;
for (int i = 0; i < retryCount; i++) {
    try {
        if (lock.tryLock(10, TimeUnit.SECONDS)) {
            // 執(zhí)行業(yè)務(wù)邏輯
            break;
        }
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        break;
    }
    if (i < retryCount - 1) {
        try {
            Thread.sleep(retryInterval);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            break;
        }
    }
}

六、性能優(yōu)化:讓系統(tǒng)飛起來

1. 異步處理非核心邏輯

將發(fā)消息、寫日志等非核心操作放到鎖外面異步執(zhí)行,減少鎖的持有時間。

RLock lock = redisson.getLock("product_123");
try {
    lock.lock();
    // 核心業(yè)務(wù)邏輯
} finally {
    lock.unlock();
}
// 異步發(fā)送消息
CompletableFuture.runAsync(() -> messageService.send("庫存已扣減"));

2. 使用本地緩存

將高頻訪問的庫存數(shù)據(jù)緩存到本地,減少對數(shù)據(jù)庫的訪問次數(shù)。比如使用 Caffeine 或 Guava Cache。

LoadingCache<Long, Integer> stockCache = Caffeine.newBuilder()
        .expireAfterWrite(1, TimeUnit.MINUTES)
        .build(key -> productRepository.findStockByProductId(key));

int stock = stockCache.get(123);

3. 限流和熔斷

在高并發(fā)場景下,使用限流組件(如 Sentinel)限制請求流量,避免系統(tǒng)過載。同時,使用熔斷機制(如 Hystrix)在服務(wù)不可用時快速失敗,防止級聯(lián)故障。

// Sentinel限流
@SentinelResource(value = "deductStock", blockHandler = "handleBlock")
public void deductStock(Long productId, Integer quantity) {
    // 扣庫存邏輯
}

public void handleBlock(Long productId, Integer quantity, BlockException e) {
    // 限流處理
    throw new RuntimeException("系統(tǒng)繁忙,請稍后再試");
}

七、總結(jié):鎖與事務(wù)的正確關(guān)系

分布式鎖和事務(wù)就像一對歡喜冤家,既相互依賴,又相互排斥。鎖可以保證數(shù)據(jù)的一致性,但如果用錯了地方,就會成為性能瓶頸。正確的做法是:

  • 鎖在事務(wù)外,事務(wù)在鎖內(nèi)
  • 鎖的粒度要細,避免大鎖
  • 結(jié)合數(shù)據(jù)庫唯一索引和重試機制
  • 選擇合適的分布式鎖方案
  • 避免分布式事務(wù),使用最終一致性

鎖不是萬能的,不要把所有問題都歸咎于鎖。在設(shè)計系統(tǒng)時,要從架構(gòu)層面考慮性能和可用性,而不是依賴鎖來解決所有問題。

責任編輯:姜華 來源: 石杉的架構(gòu)筆記
相關(guān)推薦

2022-06-27 08:21:05

Seata分布式事務(wù)微服務(wù)

2022-06-21 08:27:22

Seata分布式事務(wù)

2017-07-26 15:08:05

大數(shù)據(jù)分布式事務(wù)

2018-11-27 16:17:13

分布式Tomcat

2021-11-26 06:43:19

Java分布式

2025-04-29 04:00:00

分布式事務(wù)事務(wù)消息

2009-06-19 15:28:31

JDBC分布式事務(wù)

2021-09-29 09:07:37

分布式架構(gòu)系統(tǒng)

2009-09-18 15:10:13

分布式事務(wù)LINQ TO SQL

2019-06-19 15:40:06

分布式鎖RedisJava

2021-07-06 08:37:29

Redisson分布式

2021-07-16 07:57:34

ZooKeeperCurator源碼

2019-02-26 09:51:52

分布式鎖RedisZookeeper

2022-08-04 08:45:50

Redisson分布式鎖工具

2025-06-10 08:02:15

2019-06-26 09:41:44

分布式事務(wù)微服務(wù)

2022-03-24 07:51:27

seata分布式事務(wù)Java

2025-05-15 08:05:00

2021-07-02 08:51:09

Redisson分布式鎖公平鎖

2019-10-10 09:16:34

Zookeeper架構(gòu)分布式
點贊
收藏

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

女同性一区二区三区人了人一| 欧美精选视频一区二区| 丁香天五香天堂综合| 午夜精品久久久久久99热软件| 91玉足脚交白嫩脚丫| 向日葵视频成人app网址| 国产精品毛片久久久久久久| 亚洲中国色老太| 日本特黄特色aaa大片免费| 久久99国产精品视频| 7777精品伊人久久久大香线蕉| 草草草视频在线观看| 经典三级在线| 韩国av一区二区三区在线观看| 欧美激情视频在线免费观看 欧美视频免费一 | 在线一区视频| 色婷婷久久一区二区| 深田咏美中文字幕| 91在线成人| 亚洲电影在线播放| 亚洲一区3d动漫同人无遮挡| 天堂网av2014| 韩国一区二区在线观看| 欧美伊久线香蕉线新在线| 欧美爱爱免费视频| 久久99免费视频| 日韩欧美国产麻豆| 成人性生生活性生交12| 精品国产国产综合精品| 亚洲欧美日本国产| 欧美亚洲综合另类| 你懂的av在线| 中文在线手机av| 欧美国产综合色视频| 精品一区久久久| 精品人妻无码一区二区色欲产成人| 视频一区视频二区中文| 久久久久久久色| 欧美做爰啪啪xxxⅹ性| 神马影视一区二区| 亚洲精品97久久| 国产黄色一区二区三区| 涩涩涩久久久成人精品| 在线免费观看日本欧美| 成人免费aaa| 欧美卡一卡二| 国产成人精品亚洲日本在线桃色 | 精品熟妇无码av免费久久| 黄色网一区二区| 日韩午夜在线观看视频| 中文字幕成人免费视频| 成人国产激情在线| 在线视频综合导航| 成人三级视频在线播放| 精精国产xxxx视频在线播放| 亚洲一区二区三区免费视频| 亚洲av综合色区| 蜜桃av在线免费观看| 国产精品美女久久久久av爽李琼| 日本在线一区| 国产对白叫床清晰在线播放| 久久久亚洲精品一区二区三区| 久久精品一二三区| 四虎影院在线播放| 久久亚洲捆绑美女| 欧美成人dvd在线视频| 少妇激情av一区二区| 久久老女人爱爱| 欧美日韩在线一区二区三区| 无码国产精品高潮久久99| 97久久精品人人澡人人爽| 蜜桃导航-精品导航| 你懂的在线观看| 99国内精品久久| 欧美日韩一区二区三区免费| 国产午夜在线观看| 国产精品乱码妇女bbbb| 一本二本三本亚洲码| 亚洲图区一区| 五月婷婷久久综合| 国产精品免费成人| 成人午夜毛片| 欧美一三区三区四区免费在线看 | 好吊妞www.84com只有这里才有精品| 韩国av永久免费| 91麻豆123| 日韩一区免费观看| a视频在线免费看| 亚洲国产你懂的| 欧美成人xxxxx| 本网站久久精品| 日韩一区二区三区四区| 黑丝av在线播放| re久久精品视频| 美女av一区二区三区| 日本一级淫片色费放| 日本在线播放一区二区三区| 亚洲自拍av在线| 天堂а在线中文在线无限看推荐| 中文字幕不卡三区| 精品少妇人欧美激情在线观看| 毛片无码国产| 欧美一级视频精品观看| 好吊日免费视频| 国产精品久久久久无码av| 欧美极品美女视频网站在线观看免费 | 另类人妖一区二区av| yellow视频在线观看一区二区| 污污网站在线免费观看| 亚洲图片激情小说| 青青草国产精品视频| 黑人一区二区三区| 亚洲国产精品久久久久| 永久免费观看片现看| 在线日韩中文| 成人精品在线观看| 日韩一二三四| 亚洲在线中文字幕| 蜜臀一区二区三区精品免费视频| 欧美人妖在线观看| 九九热最新视频//这里只有精品| 日韩国产成人在线| 99久久精品99国产精品| 国产精品av免费观看| 日本精品在线一区| 国产婷婷成人久久av免费高清| www青青草原| 蜜臀久久99精品久久久画质超高清| 国产伦精品一区二区三区四区视频 | 明星裸体视频一区二区| 婷婷色在线播放| 欧美日韩一二区| 国产精品1000部啪视频| 伊人久久大香线蕉av超碰演员| 国产精品视频久久久久| 亚洲AV成人无码一二三区在线| 一区二区免费在线播放| 欧美一级小视频| 成人午夜国产| 国产成人中文字幕| 亚洲韩国青草视频| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 欧美激情一二三区| 一区二区传媒有限公司| 97一区二区国产好的精华液| 日韩中文字幕免费看| 亚洲中文无码av在线| www国产精品av| 毛片在线播放视频| 国产一区二区在线视频你懂的| 久久综合88中文色鬼| 在线视频播放大全| 中文字幕一区二区在线观看| 男女男精品视频站| 成人3d动漫在线观看| 国产精品劲爆视频| 国产高清av在线| 欧美色精品在线视频| 蜜臀久久99精品久久久久久| 久久久精品网| 欧美污视频久久久| 亚洲天堂一区二区| 一区二区三区回区在观看免费视频| 亚洲熟妇无码乱子av电影| 久久久一区二区三区捆绑**| 成人在线免费播放视频| 国产精品一区2区3区| 国产精品普通话| 中文日本在线观看| 欧美精品乱码久久久久久按摩| 久久成人小视频| 国产一区在线看| 久久观看最新视频| 第四色中文综合网| 欧美在线免费看| 九色国产在线观看| 欧美日韩一区国产| 亚洲熟女www一区二区三区| 成人免费av网站| 日本三级免费观看| 色婷婷一区二区三区| 91免费版网站在线观看| 69av成人| 一区二区三区精品99久久| 国产精品久久无码一三区| 一个色综合av| 黄色在线观看av| 免费在线观看精品| 男女裸体影院高潮| 亚洲精品中文字幕99999| 国产精品女视频| 四虎影视成人| 亚洲欧美在线x视频| 亚洲天堂国产精品| 偷窥少妇高潮呻吟av久久免费| 无码人妻精品一区二区蜜桃百度| 中文字幕日韩高清在线| 国产成人亚洲综合青青| 182tv在线播放| 精品中文视频在线| 国产乱色精品成人免费视频| 亚洲444eee在线观看| 亚洲午夜久久久久久久国产| 国产精品自拍av| 精品人妻一区二区三区四区在线| 日韩精品一卡| 好吊色欧美一区二区三区四区| 巨大黑人极品videos精品| 国内精品久久久久| 嫩草香蕉在线91一二三区| 亚洲成年人影院在线| 中文字幕资源网| 欧美日韩国产在线看| 亚洲视频重口味| 久久久蜜桃精品| 日本精品一二三区| 久色婷婷小香蕉久久| 国产亚洲精品网站| 韩日精品在线| 国产又粗又大又爽的视频| 国内精品久久久久久久久电影网| 99久久无色码| 日本一区二区中文字幕| 日本国产一区二区三区| 黄视频在线免费看| 欧美xxxx综合视频| 在线免费观看黄色av| 亚洲欧美日韩中文在线| 日本毛片在线观看| 日韩欧美www| 国产精品嫩草影院桃色| 欧日韩精品视频| 国产成人精品网| 亚洲一区二区三区在线看| 中日韩一级黄色片| 国产精品毛片久久久久久| a级片在线观看| 91欧美激情一区二区三区成人| 国产精品偷伦视频免费观看了| 九九九久久久精品| 鲁一鲁一鲁一鲁一av| 丝袜a∨在线一区二区三区不卡| 免费一级特黄特色毛片久久看| 欧美黄色一级视频| 青青在线免费视频| 久久久久久久久久久久久久久久久久| 神马影院我不卡午夜| 国产一区二区三区91| 久久亚洲一区二区| 小嫩嫩12欧美| 欧美亚洲爱爱另类综合| 亚洲精品蜜桃乱晃| 免费日韩电影在线观看| 九九热爱视频精品视频| 欧美一区视久久| 欧美日韩精品一区二区视频| 日本成人黄色免费看| 欧美日韩第一| 亚洲欧洲一二三| 99久久99久久精品国产片桃花 | 91av成人在线| 精品众筹模特私拍视频| 欧美激情影音先锋| 狠狠操一区二区三区| 欧美整片在线观看| 日本.亚洲电影| 国产有码在线一区二区视频| 国产精品美女久久久久人| 亚洲xxxx视频| 成人搞黄视频| 久久久久久久久久久久久久久久av | 亚洲欧美国产毛片在线| 免费人成年激情视频在线观看| 一区二区三区日韩欧美| 91浏览器在线观看| 91久久免费观看| 一区二区三区免费在线视频| 欧美一区二区三区四区久久| 亚洲男人第一天堂| 精品亚洲一区二区| 自拍视频在线| 欧美激情精品久久久久久黑人 | 91高潮精品免费porn| 网友自拍亚洲| 成人国产精品久久久久久亚洲| 亚洲国产欧美国产第一区| 国产一区二区久久久| 久久99国产精品视频| 国产成人精品免费看在线播放 | 国产亚洲综合色| 大地资源高清在线视频观看| 亚洲一区二区三区四区在线免费观看| 国产精品国产三级国产专区52| 欧美日韩一区二区三区四区五区 | 日韩禁在线播放| 91av资源在线| 国模精品一区二区三区色天香| 一区在线影院| av噜噜色噜噜久久| 国产精品一区高清| 2022中文字幕| 久久亚洲电影| 三上悠亚 电影| 国产三级精品视频| 国产无遮挡又黄又爽| 欧美视频一区二| 手机在线观看免费av| 久久精品久久久久久| 亚洲私拍视频| 亚洲综合在线小说| 精品国产一区二区三区| 国产aaa免费视频| 人人超碰91尤物精品国产| 亚洲一区二区三区四区av| 国产精品区一区二区三区| 国产精品第9页| 日韩天堂在线观看| 91伦理视频在线观看| 国产69精品久久久久久| 美女精品久久| 性欧美videosex高清少妇| 91久久夜色精品国产九色| 欧美视频亚洲图片| 欧美激情中文不卡| 丰满少妇xoxoxo视频| 亚洲精品在线观看视频| 成人三级网址| 国产精品日韩欧美综合| 精品在线91| 欧美aⅴ在线观看| 不卡的av电影| 久久一区二区三| 1000精品久久久久久久久| 亚洲第一精品在线观看| 欧美mv日韩mv国产| 91麻豆国产福利在线观看宅福利| 国产精品爽爽爽| 精品日韩一区| mm1313亚洲国产精品无码试看| 97精品国产露脸对白| 日本最新中文字幕| 亚洲第一天堂无码专区| 色呦呦在线观看视频| 亚洲专区中文字幕| 综合精品久久| 香蕉视频xxxx| 亚洲免费观看视频| 国产精品国产三级国产aⅴ| 中文字幕在线观看亚洲| 日韩高清在线| 日韩午夜视频在线观看| 日本不卡在线视频| 成人性视频免费看| 欧美高清性hdvideosex| 日本激情在线观看| 成人福利网站在线观看| 成人短片线上看| 欧美美女一级片| 亚洲欧美怡红院| 国产精品色综合| 美女福利精品视频| 成人av动漫| 欧美视频在线观看网站| 91蜜桃免费观看视频| 久久久久久在线观看| 一区二区三区回区在观看免费视频| 国产极品久久久久久久久波多结野| 日韩尤物视频| 久久精品免费观看| wwwav国产| 亚洲精品在线一区二区| 手机在线观看av| 日韩理论片在线观看| 久久精品国产精品亚洲综合| 日韩激情小视频| 精品精品国产高清a毛片牛牛| av手机在线观看| 三区精品视频观看| 国产一区不卡在线| 五月婷婷开心网| 在线视频日韩精品| 欧美另类中文字幕| 99久久久无码国产精品6| 国产精品欧美综合在线| www香蕉视频| 国产91露脸中文字幕在线| 欧美激情777| 国产免费无码一区二区| 色琪琪一区二区三区亚洲区| 一级毛片视频在线观看| www.久久久| 日一区二区三区| 欧美卡一卡二卡三| 亚洲欧美日韩网| 麻豆久久一区| 日本免费黄视频| 亚洲三级久久久| 美丽的姑娘在线观看免费动漫| 成人午夜在线视频一区| 国产九九精品|