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

超碰在线亚洲| 亚洲电影视频在线| 免费成人av在线播放| 视频直播国产精品| 精品人妻二区中文字幕| 蜜桃av在线播放| 国产农村妇女毛片精品久久麻豆 | 丁香婷婷久久| 玉米视频成人免费看| 免费国产一区二区| 国产精品久久久久久久免费看| 黄色精品网站| 最新69国产成人精品视频免费| 9.1在线观看免费| 亚洲成av在线| 亚洲成人在线免费| 亚洲天堂电影网| 日韩在线观看视频网站| 美日韩一区二区| 国内精品模特av私拍在线观看| 69xxx免费| 欧美日韩一区二区三区不卡视频| 欧美系列在线观看| 国产美女网站在线观看| 好操啊在线观看免费视频| 99国产精品久久久久久久久久| 国产精品久久中文| aaa人片在线| 欧美三级不卡| 日韩中文在线视频| 日韩av在线看免费观看| 亚洲国产中文在线| 欧美蜜桃一区二区三区 | 日本在线播放一区二区三区| 欧美国产日韩视频| 韩国一级黄色录像| 精品久久久久久久久久久下田| 欧美一区二区三区在线观看视频| 日韩精品一区二区三区不卡| 漫画在线观看av| 亚洲综合色婷婷| 先锋影音男人资源| 午夜视频在线观看网站| 久久久精品一品道一区| 久久精品国产99精品国产亚洲性色| 国产黄色片免费| 精品影院一区二区久久久| 国产精品99久久99久久久二8| 日本少妇久久久| 欧美日韩视频| 色综合久久悠悠| 亚洲熟女毛茸茸| 婷婷久久综合| 日韩亚洲第一页| 能免费看av的网站| 亚洲人成网站77777在线观看| 精品国产乱码久久久久久影片| 一级黄色免费毛片| 欧洲精品99毛片免费高清观看 | 高清欧美性猛交| 国产精品久久久久久久精| 99精品视频在线观看播放| 中文字幕国产日韩| 女同久久另类69精品国产| 日韩精品电影| 久久精品国产亚洲精品2020| 国产精品久久久免费看| 亚洲精品va| 欧美大片网站在线观看| 久久久久无码国产精品| 一区久久精品| 5566成人精品视频免费| 国产精品久久久久久久久久久久久久久久久 | 欧美大黄免费观看| 涩视频在线观看| 日韩理论电影中文字幕| 亚洲天天在线日亚洲洲精| 亚洲天堂精品一区| 综合激情在线| 久久久噜噜噜久噜久久| 日产精品久久久| 日韩和欧美一区二区三区| 国产裸体写真av一区二区| 国产视频www| 成人h版在线观看| 欧美伦理一区二区| 午夜视频在线免费观看| 亚洲图片自拍偷拍| 成年网站在线免费观看| 韩日精品一区| 日韩一级高清毛片| 波多野结衣a v在线| 久久人人99| 久久久在线视频| 免费看av在线| 国产成人免费高清| 欧美日韩精品久久久免费观看| 网友自拍视频在线| 一区二区三区蜜桃| 国产激情在线观看视频| 欧美久久亚洲| 亚洲网站在线观看| 久久免费视频精品| 免费av网站大全久久| 成人av中文| 91精彩在线视频| 亚洲成人中文在线| 亚洲视频一二三四| 丝袜美腿综合| 色综合久久88| 91资源在线视频| 久久影音资源网| 美女av免费观看| 91福利精品在线观看| 精品国产乱码久久久久久久久 | 色偷偷一区二区三区| 校园春色 亚洲色图| 东京久久高清| 精品国产一区二区三区久久| 五月激情六月丁香| 国内不卡的二区三区中文字幕| 久热这里只精品99re8久| 黄色在线观看网站| 欧美影片第一页| 久久精品综合视频| 伊人精品在线| 99爱精品视频| 欧美激情免费| 欧美亚洲动漫精品| caopeng视频| 99精品免费| 99在线视频首页| 成人看av片| 欧美色爱综合网| 国产熟妇搡bbbb搡bbbb| 亚洲国产清纯| 成人看片视频| 在线观看的网站你懂的| 欧美老女人在线| 色噜噜噜噜噜噜| 三级欧美韩日大片在线看| 久久爱av电影| 黄色在线网站噜噜噜| 日韩精品一区二区三区老鸭窝 | 亚洲成av人片观看| 成人三级做爰av| 亚洲精品电影| 亚洲一区亚洲二区亚洲三区| 免费av在线网站| 欧美精品成人一区二区三区四区| 国产传媒视频在线| 毛片av一区二区| 在线免费一区| 国产美女视频一区二区| 久久夜色精品亚洲噜噜国产mv| 国产精品久久欧美久久一区| 亚洲日韩欧美一区二区在线| 99999精品| 欧美日韩免费观看一区=区三区| 91九色在线观看| 青草视频在线免费直播| 精品久久久影院| 日本视频免费在线| 99久久精品国产毛片| 91国视频在线| 国产一区二区三区四区二区| 国产精品免费一区二区三区都可以| chinese偷拍一区二区三区| 欧美私模裸体表演在线观看| 国产又粗又猛又爽又黄的视频小说| 蜜桃视频第一区免费观看| 亚洲一区二区在| 二区三区精品| 久久久久久久影院| 亚洲欧洲成人在线| 在线观看日韩高清av| 国产美女网站视频| 国产一区二区三区日韩| 国产成人艳妇aa视频在线 | 日韩国产美国| 在线高清欧美| 午夜精品免费视频| 久久免费看视频| 欧美高清视频一二三区 | 成人午夜影视| 91精品国产91综合久久蜜臀| 久久免费视频6| 国产日产精品1区| 一级黄色大片儿| 久久av最新网址| 9999在线观看| 青青草这里只有精品| 国产精品免费一区| 91九色在线看| 日韩中文在线中文网三级| 蜜桃av中文字幕| 在线观看日韩av先锋影音电影院| 欧美国产在线看| 国产欧美一区二区三区鸳鸯浴 | 91欧美一区二区| 91国内在线播放| 香蕉av777xxx色综合一区| 黄色www在线观看| 国产成人高清| 国产精品视频免费一区二区三区| 伊人久久在线| 欧美劲爆第一页| 香蕉视频免费在线播放| 亚洲精品ady| 国产黄a三级三级看三级| 日本丶国产丶欧美色综合| 欧美极品视频在线观看| 国产亚洲欧美在线| 又黄又色的网站| 久久成人免费电影| 国产午夜福利视频在线观看| 午夜欧美理论片| 亚洲在线色站| 在线看成人短视频| 国产伦精品一区二区三区视频黑人 | 久久久久久久久久一区| 国产日韩1区| 日韩精品免费一区| 日本黄色精品| 日本精品一区二区| 欧美中文一区| 国产一区二区三区四区五区加勒比| 日韩专区视频| 国产精品久久久久影院日本| 在线观看福利电影| 欧美激情免费在线| 国产欧美黑人| www国产精品视频| 成人性爱视频在线观看| 亚洲人成网站免费播放| 性xxxx搡xxxxx搡欧美| 欧美v日韩v国产v| av网站在线观看免费| 欧美色图12p| 中文字幕在线2018| 欧美丝袜自拍制服另类| 国产精品成人久久久| 欧美性猛交xxxx免费看久久久| 国产在线观看免费av| 一区二区三区在线观看欧美| xxxx日本少妇| 亚洲美女屁股眼交| 九九精品视频免费| 中文字幕亚洲欧美在线不卡| 亚洲欧洲综合网| 国产精品―色哟哟| 国产老头老太做爰视频| 日韩毛片视频在线看| 欧美做爰啪啪xxxⅹ性| 亚洲日本韩国一区| 超碰手机在线观看| 一区二区三区不卡视频| 久久久国产精品黄毛片| 亚洲va中文字幕| 黄瓜视频在线免费观看| 一本色道久久综合狠狠躁的推荐| 怡红院av久久久久久久| 欧美在线免费视屏| 一二三四区在线| 日韩欧美www| 日本黄色三级视频| 日韩电影免费在线观看中文字幕| 天堂资源中文在线| 国产亚洲欧洲在线| 欧美午夜电影一区二区三区| 美女福利视频一区| 成人在线免费观看黄色| 国外成人在线视频| 深夜成人在线| 国产精品丝袜一区二区三区| 亚洲欧美久久精品| 国产免费一区二区三区| 亚洲图区在线| 伊人色综合影院| 欧美激情自拍| 人妻精品无码一区二区三区| 狂野欧美一区| 午夜激情影院在线观看| 成人国产在线观看| 香蕉视频久久久| 亚洲日本中文字幕区| 色婷婷av国产精品| 欧美日韩在线不卡| 性一交一乱一乱一视频| 亚洲欧美精品伊人久久| 永久免费av在线| 午夜精品久久久久久久久久久久| 日韩电影网站| www.成人三级视频| 国产一区二区电影在线观看| 欧洲金发美女大战黑人| 小嫩嫩精品导航| 樱花草www在线| 久久先锋资源网| 欧美成人aaa片一区国产精品| 婷婷国产在线综合| 91肉色超薄丝袜脚交一区二区| 精品sm捆绑视频| 午夜不卡视频| 看电视剧不卡顿的网站| 亚洲a∨日韩av高清在线观看| 久久久久久久久久久久久久久久久久久久| 欧美一区观看| 亚洲一级高清| 三日本三级少妇三级99| 久久久久国产精品厨房| 麻豆影视在线播放| 欧美色综合网站| 日本一二三区在线视频| 久久99亚洲热视| 福利精品一区| 欧美日韩在线观看一区二区三区 | 最近更新的2019中文字幕| 999av小视频在线| 亚洲一区二区中文| 日韩啪啪电影网| 99久久激情视频| 99精品在线观看视频| 久久久久97国产| 日韩写真欧美这视频| 91电影在线播放| 日本国产高清不卡| 精品福利一区| 日韩a级黄色片| 激情五月婷婷综合| 美国黑人一级大黄| 日韩欧美在线视频观看| 人妻与黑人一区二区三区| 美女国内精品自产拍在线播放| 日韩电影精品| 亚洲一区二区在线免费观看| 久久久人人人| 亚洲一区二区三区蜜桃| 欧美视频在线观看免费网址| 欧美视频一二区| 美女av一区二区三区| 国产亚洲高清一区| 日韩精品一区二区三区电影| 蜜臀精品久久久久久蜜臀| 欧美做受xxxxxⅹ性视频| 日韩欧美在线播放| 久蕉依人在线视频| 国产成人一区三区| 国产a久久精品一区二区三区 | 欧美男人天堂| 精品免费国产| 国产毛片久久| 欧美老熟妇乱大交xxxxx | 日本成年人网址| 久久久久综合网| 中文人妻av久久人妻18| 亚洲网址你懂得| 欧美啪啪网站| 在线观看日韩片| 国产乱子伦视频一区二区三区 | 婷婷中文字幕综合| 欧美一级性视频| 欧美中文字幕在线观看| 嫩草影视亚洲| www.日本一区| 亚洲丝袜精品丝袜在线| www.四虎在线观看| 午夜精品蜜臀一区二区三区免费| 日本成人a网站| av无码精品一区二区三区| 国产精品免费久久久久| 国产熟女一区二区三区四区| 色综合久久天天综线观看| 欧美高清视频看片在线观看 | 国产亚洲精品女人久久久久久| 亚洲第一中文字幕| 伊人久久综合一区二区| 一区二区三区精品国产| 国产成人亚洲精品青草天美| 1级黄色大片儿| 正在播放欧美一区| 老司机亚洲精品一区二区| 国产av人人夜夜澡人人爽麻豆| 久久男人中文字幕资源站| 亚洲综合五月天婷婷丁香| 欧美精品在线免费| 美女少妇全过程你懂的久久 | 在线观看免费国产视频| 国产午夜精品视频免费不卡69堂| 天天综合在线观看| 男人插女人视频在线观看| 中文一区二区完整视频在线观看| 国产日本精品视频| 45www国产精品网站| 97久久视频| 免费无码一区二区三区| 欧美日韩国产高清一区二区| 岛国av在线播放| 国产免费色视频| 久久婷婷一区二区三区|