日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線(xiàn)實(shí)戰(zhàn)洞察。

模擬銀行賬戶(hù)轉(zhuǎn)賬系統(tǒng)源碼拆解:事務(wù)、冪等、死鎖與對(duì)賬

模擬銀行賬戶(hù)轉(zhuǎn)賬系統(tǒng)源碼拆解:事務(wù)、冪等、死鎖與對(duì)賬 簡(jiǎn)介面向 Java 初學(xué)者的銀行賬戶(hù)轉(zhuǎn)賬模擬系統(tǒng)以圖形界面與多線(xiàn)程機(jī)制實(shí)現(xiàn)適合正在學(xué)習(xí) Swing 界面編程和線(xiàn)程并發(fā)的讀者幫助理解多線(xiàn)程共享賬戶(hù)余額時(shí)的讀寫(xiě)與同步問(wèn)題。程序設(shè)定 A、B 兩個(gè)初始余額均為 1000 元的賬戶(hù)由線(xiàn)程隨機(jī)向?qū)Ψ睫D(zhuǎn)賬轉(zhuǎn)賬金額不得大于當(dāng)前余額余額為零即無(wú)法繼續(xù)交易界面下方設(shè)有「交易開(kāi)始」「清屏」按鈕點(diǎn)擊開(kāi)始后按鈕切換為「結(jié)束交易」結(jié)束時(shí)將全部記錄寫(xiě)入 ab.txt。壓縮包共 2 個(gè) java 源文件分別承載窗口界面的構(gòu)建與轉(zhuǎn)賬線(xiàn)程邏輯整體僅約 2KB結(jié)構(gòu)緊湊便于導(dǎo)入 IDE 直接運(yùn)行和二次改造。已有 4171 人學(xué)習(xí)下載可作為課程實(shí)驗(yàn)、并發(fā)練習(xí)或課程設(shè)計(jì)的參考范例幫助讀者掌握界面事件響應(yīng)、線(xiàn)程調(diào)度與交易記錄持久化的完整實(shí)現(xiàn)思路。1. 銀行賬戶(hù)轉(zhuǎn)賬幾乎是每個(gè)做后端課程設(shè)計(jì)的人都寫(xiě)過(guò)的題目?jī)蓚€(gè)賬戶(hù)一扣一加包進(jìn)事務(wù)跑通就算完事。可并發(fā)一開(kāi)到 50余額對(duì)不上、偶發(fā)死鎖、超時(shí)重試后錢(qián)被扣兩次問(wèn)題會(huì)一起冒出來(lái)。這份模擬銀行賬戶(hù)轉(zhuǎn)賬系統(tǒng)的源碼包價(jià)值不在“能轉(zhuǎn)”而在它把賬戶(hù)表、流水表、事務(wù)邊界、冪等占位和對(duì)賬 SQL 都攤開(kāi)擺在明面上能順著一條鏈路看清錢(qián)從 A 到 B 的每一步也能看清哪一步最容易漏。適合正在做課程設(shè)計(jì)的學(xué)生、要給業(yè)務(wù)系統(tǒng)補(bǔ)一段結(jié)算邏輯的后端以及想把“事務(wù)到底加在哪一層”弄明白的開(kāi)發(fā)者。下面按拆包順序走數(shù)據(jù)模型、調(diào)用鏈路、冪等與對(duì)賬、踩坑現(xiàn)場(chǎng)最后是一套能自己跑的驗(yàn)證方法。2. 數(shù)據(jù)模型先立住賬戶(hù)表、流水表、單據(jù)表怎么擺拿到包先別急著跑main把建表腳本翻出來(lái)看一遍基本能判斷這套代碼是“能演示”還是“能改”。模擬轉(zhuǎn)賬系統(tǒng)里最常見(jiàn)的偷懶做法是只建一張account表扣款balance balance - x入賬balance balance x跑通了日志也漂亮。問(wèn)題是這套結(jié)構(gòu)沒(méi)有任何回溯能力賬一旦對(duì)不上你只能看著兩個(gè)數(shù)字發(fā)呆不知道是哪一筆、哪個(gè)時(shí)刻、哪個(gè)方向出的錯(cuò)。所以合格的做法一定是三張表起步——賬戶(hù)、單據(jù)、流水各管一件事。2.1 快照與事實(shí)分離為什么流水表不能省賬戶(hù)表存的是快照回答“現(xiàn)在有多少錢(qián)”流水表存的是事實(shí)回答“錢(qián)是怎么變成現(xiàn)在這樣的”。兩者的關(guān)系類(lèi)似庫(kù)存與出入庫(kù)單快照可以重算事實(shí)不能重寫(xiě)。只留快照的系統(tǒng)等于把賬本燒了只記住余額出了問(wèn)題連后悔藥都沒(méi)得吃。一筆轉(zhuǎn)賬在流水表里應(yīng)該落兩條記錄一條出賬DEBIT一條入賬CREDIT金額相等、方向相反。這樣就得到一個(gè)恒等式所有流水的出賬金額之和永遠(yuǎn)等于入賬金額之和誤差為零。這條恒等式是對(duì)賬時(shí)最強(qiáng)的斷言比任何“我核對(duì)了一遍余額”都可靠。很多課程設(shè)計(jì)只落一條“轉(zhuǎn)賬流水”把 from/to 塞進(jìn)同一行看著省事真出問(wèn)題時(shí)你沒(méi)法用 SQL 直接驗(yàn)證平衡性只能寫(xiě)代碼繞。單據(jù)表則是另一層一次轉(zhuǎn)賬請(qǐng)求對(duì)應(yīng)一行帶唯一單號(hào)它既是業(yè)務(wù)憑證也是冪等鍵。有了它“這筆請(qǐng)求到底成功沒(méi)有”這個(gè)問(wèn)題才有地方回答。三張表的分工可以記成一句話(huà)單據(jù)管請(qǐng)求流水管變化賬戶(hù)管現(xiàn)狀。2.2 建表 SQL三個(gè)約束把臟數(shù)據(jù)擋在數(shù)據(jù)庫(kù)門(mén)外下面是我在這個(gè)包里看到的表結(jié)構(gòu)我做了一點(diǎn)整理注釋補(bǔ)全了可以直接拿去跑。注意引擎必須是 InnoDBMyISAM 沒(méi)有事務(wù)也沒(méi)有行鎖這個(gè)場(chǎng)景下等于殘廢。-- 賬戶(hù)表只存當(dāng)前狀態(tài)balance 是快照 CREATE TABLE account ( id BIGINT NOT NULL AUTO_INCREMENT, account_no VARCHAR(32) NOT NULL COMMENT 賬號(hào)業(yè)務(wù)唯一鍵, owner_name VARCHAR(64) NOT NULL COMMENT 戶(hù)名演示用不存任何真實(shí)信息, balance DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT 可用余額單位元, status TINYINT NOT NULL DEFAULT 1 COMMENT 1正常 0凍結(jié), created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_account_no (account_no), CONSTRAINT ck_balance_nonneg CHECK (balance 0) -- 最后一道防線(xiàn) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- 單據(jù)表一次轉(zhuǎn)賬請(qǐng)求一行order_no 同時(shí)是冪等鍵 CREATE TABLE transfer_order ( id BIGINT NOT NULL AUTO_INCREMENT, order_no VARCHAR(40) NOT NULL COMMENT 冪等鍵客戶(hù)端生成或服務(wù)端雪花號(hào), from_account VARCHAR(32) NOT NULL, to_account VARCHAR(32) NOT NULL, amount DECIMAL(18,2) NOT NULL, status TINYINT NOT NULL DEFAULT 0 COMMENT 0處理中 1成功 2失敗, fail_reason VARCHAR(255) DEFAULT NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_order_no (order_no), -- 冪等靠它不靠先查后插 KEY idx_from_created (from_account, created_at) -- 查某賬戶(hù)最近轉(zhuǎn)出用 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- 流水表只追加不更新一筆轉(zhuǎn)賬兩條 CREATE TABLE account_flow ( id BIGINT NOT NULL AUTO_INCREMENT, order_no VARCHAR(40) NOT NULL, account_no VARCHAR(32) NOT NULL, direction TINYINT NOT NULL COMMENT 1出賬 2入賬, amount DECIMAL(18,2) NOT NULL, balance_after DECIMAL(18,2) NOT NULL COMMENT 記賬后余額回溯時(shí)不用重算, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_order_acc_dir (order_no, account_no, direction), -- 防同一筆重復(fù)記賬 KEY idx_acc_id (account_no, id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;三個(gè)約束是這套表結(jié)構(gòu)的核心。uk_order_no讓并發(fā)下只有一條單據(jù)能插進(jìn)去重復(fù)請(qǐng)求在數(shù)據(jù)庫(kù)層面就被擋住uk_order_acc_dir保證同一筆單據(jù)對(duì)同一賬戶(hù)同一方向只能記一次賬重試邏輯寫(xiě)錯(cuò)了也不會(huì)雙記ck_balance_nonneg是余額的兜底任何繞過(guò)業(yè)務(wù)校驗(yàn)的路徑都會(huì)被數(shù)據(jù)庫(kù)拒絕。提示MySQL 5.7 及更早版本會(huì)解析CHECK但不執(zhí)行寫(xiě)上去只是注釋。上線(xiàn)前用SELECT VERSION();確認(rèn)8.0.16 以上才真正生效。如果只能跑 5.7這個(gè)斷言必須由應(yīng)用層和定時(shí)巡檢補(bǔ)上。索引也在為后面的查詢(xún)鋪路。idx_acc_id (account_no, id)是給“查某賬戶(hù)流水按時(shí)間倒序翻頁(yè)”準(zhǔn)備的用自增 id 代替 created_at 排序可以避免同一秒內(nèi)多條流水順序不穩(wěn)。idx_from_created用來(lái)做“某賬戶(hù)當(dāng)日轉(zhuǎn)出總額”這類(lèi)風(fēng)控口徑的統(tǒng)計(jì)。2.3 余額存字段還是實(shí)時(shí)匯總?cè)N方案的成本賬新手最容易糾結(jié)的一點(diǎn)既然有流水表為什么還要在賬戶(hù)表冗余一個(gè)balance直接SUM不行嗎能行但要看規(guī)模。三種常見(jiàn)方案的實(shí)際差別如下。方案余額怎么得到讀性能寫(xiě)性能一致性風(fēng)險(xiǎn)適用場(chǎng)景只存流水SUM(CASE WHEN direction2 THEN amount ELSE -amount END)差隨流水行數(shù)線(xiàn)性劣化好純追加低賬戶(hù)少、流水少的課堂演示余額字段 流水直接讀account.balance好主鍵或唯一索引命中中需行鎖保護(hù)中字段與流水可能不一致絕大多數(shù)業(yè)務(wù)系統(tǒng)余額字段 日終校準(zhǔn)讀字段定時(shí)任務(wù)用流水重算比對(duì)好中低有對(duì)賬任務(wù)的正式系統(tǒng)這個(gè)包用的是第二種也是我一般會(huì)選的讀多寫(xiě)少的場(chǎng)景下把計(jì)算成本壓到寫(xiě)入時(shí)一次性付掉。代價(jià)是必須在轉(zhuǎn)賬鏈路里保證“改余額”和“寫(xiě)流水”在同一個(gè)事務(wù)里否則就會(huì)出現(xiàn)賬戶(hù)扣了錢(qián)、流水沒(méi)落下的單邊賬。第三種是在第二種基礎(chǔ)上加定時(shí)校準(zhǔn)屬于線(xiàn)上系統(tǒng)的標(biāo)配課程設(shè)計(jì)里加一個(gè)每天凌晨跑的比對(duì)任務(wù)成本很低答辯時(shí)也是個(gè)加分項(xiàng)。有一點(diǎn)要提前說(shuō)清余額字段是冗余冗余就意味著可能不一致。所以系統(tǒng)里必須存在一條能從流水重算出余額的路徑哪怕它平時(shí)不跑。這條路徑就是你的后悔藥沒(méi)有它任何“余額好像不對(duì)”的反饋你都只能靠猜。3. 轉(zhuǎn)賬鏈路拆解一次請(qǐng)求里的鎖、事務(wù)和回滾表建好了接下來(lái)看錢(qián)的路徑。一次轉(zhuǎn)賬從 HTTP 進(jìn)來(lái)經(jīng)過(guò)參數(shù)校驗(yàn)、冪等占位、加鎖、校驗(yàn)、扣款、入賬、記流水、改單據(jù)狀態(tài)最后提交事務(wù)。這條鏈路上任何一步的位置放錯(cuò)都會(huì)在并發(fā)下暴露出來(lái)。這一章拆三段事務(wù)邊界畫(huà)在哪、鎖按什么順序拿、隔離級(jí)別和超時(shí)怎么配。3.1 事務(wù)邊界為什么Transactional只能貼在 Service 的公有方法上事務(wù)邊界的原則很簡(jiǎn)單一個(gè)事務(wù)只包住必須原子的一段數(shù)據(jù)庫(kù)操作越短越好。放在 Controller 上是錯(cuò)的把參數(shù)解析、序列化都包進(jìn)去了放在 Mapper 上也不對(duì)一次轉(zhuǎn)賬要?jiǎng)铀膹埍砜?Mapper正確位置是 Service 的公有方法而且這個(gè)方法必須是通過(guò) Spring 代理調(diào)用的。下面這幾件事千萬(wàn)別塞進(jìn)事務(wù)里調(diào)用外部接口、發(fā)消息、寫(xiě)文件日志、睡幾毫秒做“防重”。事務(wù)持有數(shù)據(jù)庫(kù)連接和行鎖任何耗時(shí)操作都在放大鎖沖突窗口。我見(jiàn)過(guò)把一次 HTTP 回調(diào)寫(xiě)在事務(wù)里的實(shí)現(xiàn)壓測(cè)時(shí)鎖等待直接打滿(mǎn)innodb_lock_wait_timeout一個(gè)接一個(gè)超時(shí)。常見(jiàn)做法是把外部調(diào)用挪到事務(wù)提交之后用事務(wù)同步回調(diào)或者本地消息表來(lái)保證最終一致。另一個(gè)容易忽略的點(diǎn)是rollbackFor。Spring 默認(rèn)只在遇到RuntimeException和Error時(shí)回滾受檢異常直接提交。也就是說(shuō)你throw new IOException()之后扣款已經(jīng)落庫(kù)了。// 錯(cuò)誤寫(xiě)法受檢異常不回滾扣款會(huì)留在庫(kù)里 Transactional public void transfer(TransferCmd cmd) throws Exception { ... } // 正確寫(xiě)法顯式聲明回滾異常類(lèi)型 Transactional(rollbackFor Exception.class) public void transfer(TransferCmd cmd) { ... }參數(shù)說(shuō)明rollbackFor Exception.class覆蓋所有異常如果業(yè)務(wù)上確實(shí)有“部分失敗也要提交”的場(chǎng)景用noRollbackFor單獨(dú)排除別靠吞異常來(lái)實(shí)現(xiàn)吞異常是后面第 5 章要重點(diǎn)說(shuō)的坑。3.2 加鎖順序與核心轉(zhuǎn)賬代碼并發(fā)轉(zhuǎn)賬出死鎖八成是鎖順序不一致。A 轉(zhuǎn) B 時(shí)先鎖 A 再鎖 BB 轉(zhuǎn) A 時(shí)先鎖 B 再鎖 A兩個(gè)事務(wù)各持一把等對(duì)方InnoDB 檢測(cè)到環(huán)路就干掉其中一個(gè)報(bào)Deadlock found when trying to get lock。解決辦法不復(fù)雜所有涉及雙賬戶(hù)的操作統(tǒng)一按賬號(hào)字典序升序加鎖。賬號(hào)是字符串用compareTo排排完再依次SELECT ... FOR UPDATE。Service public class TransferService { private final AccountMapper accountMapper; private final TransferOrderMapper orderMapper; private final AccountFlowMapper flowMapper; Transactional(rollbackFor Exception.class, isolation Isolation.READ_COMMITTED) public TransferResult transfer(TransferCmd cmd) { String orderNo cmd.getOrderNo(); // 1. 搶占冪等鍵并發(fā)下只有一個(gè)線(xiàn)程能插進(jìn) uk_order_no try { orderMapper.insertProcessing(orderNo, cmd.getFrom(), cmd.getTo(), cmd.getAmount()); } catch (DuplicateKeyException e) { // 重復(fù)請(qǐng)求不再轉(zhuǎn)賬直接返回上一次的結(jié)果 return orderMapper.queryResult(orderNo); } // 2. 統(tǒng)一加鎖順序賬號(hào)字典序小的先鎖 String first cmd.getFrom().compareTo(cmd.getTo()) 0 ? cmd.getFrom() : cmd.getTo(); String second first.equals(cmd.getFrom()) ? cmd.getTo() : cmd.getFrom(); Account a accountMapper.lockByNo(first); // SELECT ... FOR UPDATE Account b accountMapper.lockByNo(second); if (a null || b null) { throw new BizException(賬戶(hù)不存在); } if (a.getStatus() ! 1 || b.getStatus() ! 1) { throw new BizException(賬戶(hù)狀態(tài)異常); } // 3. 金額比較用 compareToBigDecimal 的 equals 會(huì)比較 scale if (a.getBalance().compareTo(cmd.getAmount()) 0) { throw new BizException(余額不足); } // 4. 帶條件的扣款即便上面的判斷失效這里也扣不成負(fù)數(shù) int updated accountMapper.debit(cmd.getFrom(), cmd.getAmount()); if (updated ! 1) { throw new BizException(扣款失敗余額不足); } accountMapper.credit(cmd.getTo(), cmd.getAmount()); // 5. 兩條流水出賬一條、入賬一條各帶記賬后余額 flowMapper.insert(orderNo, cmd.getFrom(), 1, cmd.getAmount(), accountMapper.selectBalance(cmd.getFrom())); flowMapper.insert(orderNo, cmd.getTo(), 2, cmd.getAmount(), accountMapper.selectBalance(cmd.getTo())); orderMapper.markSuccess(orderNo); return TransferResult.success(orderNo); } }對(duì)應(yīng)的 Mapper 里扣款語(yǔ)句必須帶條件這是余額不為負(fù)的最終保障!-- 扣款把判斷和更新合成一條語(yǔ)句消除檢查與執(zhí)行之間的窗口 -- update iddebit UPDATE account SET balance balance - #{amount}, updated_at NOW() WHERE account_no #{accountNo} AND balance gt; #{amount} /update !-- 入賬不需要條件加錢(qián)永遠(yuǎn)安全 -- update idcredit UPDATE account SET balance balance #{amount}, updated_at NOW() WHERE account_no #{accountNo} /update邏輯說(shuō)明第 1 步的冪等占位放在事務(wù)內(nèi)、業(yè)務(wù)操作之前讓重復(fù)請(qǐng)求在最早的地方被擋掉第 2 步的排序是關(guān)鍵它把“兩個(gè)事務(wù)互相等”這件事從根上消除第 4 步的updated ! 1判斷不能省它是把數(shù)據(jù)庫(kù)返回的影響行數(shù)當(dāng)作業(yè)務(wù)信號(hào)用——影響 0 行說(shuō)明條件不成立直接拋異?;貪L別硬著頭皮往下走。參數(shù)說(shuō)明isolation Isolation.READ_COMMITTED是可選項(xiàng)MySQL 默認(rèn)的可重復(fù)讀在這個(gè)場(chǎng)景下也能工作因?yàn)镕OR UPDATE是當(dāng)前讀。但讀已提交能讓鎖的持有范圍更小一些配合短事務(wù)更穩(wěn)。如果你的包用的是默認(rèn)隔離級(jí)別別為了這一行去改先跑通再說(shuō)。注意SELECT ... FOR UPDATE必須命中索引否則會(huì)退化成鎖全表。確認(rèn)account_no上有唯一索引且執(zhí)行計(jì)劃是typeeq_ref或ref。3.3 隔離級(jí)別、鎖等待和連接池的三個(gè)參數(shù)代碼寫(xiě)對(duì)了參數(shù)配錯(cuò)一樣出事。這個(gè)包里我調(diào)整過(guò)三個(gè)值都比較關(guān)鍵。第一個(gè)是innodb_lock_wait_timeout默認(rèn) 50 秒。轉(zhuǎn)賬這種短事務(wù)等 50 秒毫無(wú)意義只會(huì)把 Tomcat 線(xiàn)程和連接池一起拖死。改成 3 到 5 秒超時(shí)立刻失敗讓上游重試比干等強(qiáng)。-- 會(huì)話(huà)級(jí)先驗(yàn)證確認(rèn)無(wú)副作用后再寫(xiě)進(jìn)配置文件 SET SESSION innodb_lock_wait_timeout 5; SHOW VARIABLES LIKE innodb_lock_wait_timeout;第二個(gè)是 Spring 事務(wù)的timeout屬性單位秒。它和數(shù)據(jù)庫(kù)側(cè)的鎖等待超時(shí)是兩個(gè)層次的東西前者管整個(gè)事務(wù)方法的執(zhí)行時(shí)長(zhǎng)后者只管等鎖。兩個(gè)都要設(shè)Transactional(timeout 10)配合數(shù)據(jù)庫(kù) 5 秒能保證事務(wù)不會(huì)因?yàn)槟硹l慢 SQL 無(wú)限掛起。第三個(gè)是連接池大小。轉(zhuǎn)賬事務(wù)在高峰期同時(shí)占用連接數(shù)的上限就是池子的上限。池子太小會(huì)排隊(duì)太大會(huì)把數(shù)據(jù)庫(kù)打滿(mǎn)。經(jīng)驗(yàn)值是從 10 到 20 起壓測(cè)時(shí)看HikariPool的activeConnections和pendingThreads后者長(zhǎng)期大于 0 就說(shuō)明該加但別超過(guò)數(shù)據(jù)庫(kù)max_connections的七成。還有一個(gè)參數(shù)常被忽略spring.datasource.hikari.connection-timeout默認(rèn) 30 秒。轉(zhuǎn)賬接口的 RT 通常是幾十毫秒連接等待 30 秒沒(méi)有意義調(diào)到 3 秒左右讓過(guò)載快速失敗比雪崩好。4. 冪等與對(duì)賬重復(fù)提交、超時(shí)重試之后賬還對(duì)得上嗎真實(shí)場(chǎng)景里轉(zhuǎn)賬請(qǐng)求不會(huì)只來(lái)一次。用戶(hù)手抖點(diǎn)兩下、網(wǎng)關(guān)超時(shí)自動(dòng)重試、上游消息重復(fù)投遞都會(huì)讓你的接口收到同一個(gè)業(yè)務(wù)請(qǐng)求的多份副本。冪等不是加分項(xiàng)是底線(xiàn)。而對(duì)賬是冪等失效時(shí)的兜底兩者一套組合才能說(shuō)這個(gè)系統(tǒng)“賬是對(duì)的”。4.1 冪等占位用唯一索引搶鎖別用先查后插先查后插在并發(fā)下必然翻車(chē)因?yàn)椴樵?xún)和插入之間存在窗口兩個(gè)線(xiàn)程可以同時(shí)查到“不存在”。正確做法是把判斷交給數(shù)據(jù)庫(kù)order_no上加唯一索引插入成功的那一個(gè)線(xiàn)程繼續(xù)執(zhí)行失敗的直接走重復(fù)請(qǐng)求分支。這就是常說(shuō)的“用唯一約束做分布式鎖”。但這里有個(gè) Spring 層面的坑要提前避開(kāi)。如果冪等占位和業(yè)務(wù)操作在同一個(gè)事務(wù)里插入拋出的DuplicateKeyException被catch住了事務(wù)本身可能已經(jīng)被標(biāo)記為 rollback-only后續(xù)任何操作都會(huì)在提交時(shí)炸掉報(bào)Transaction rolled back because it has been marked as rollback-only。不同版本的代理行為有差異穩(wěn)妥的做法是把占位插入放到獨(dú)立事務(wù)里。// 獨(dú)立事務(wù)占位失敗不影響外層捕獲異常后事務(wù)仍是干凈的 Transactional(propagation Propagation.REQUIRES_NEW, rollbackFor Exception.class) public boolean tryOccupy(String orderNo, TransferCmd cmd) { try { orderMapper.insertProcessing(orderNo, cmd.getFrom(), cmd.getTo(), cmd.getAmount()); return true; // 搶到了繼續(xù)轉(zhuǎn)賬 } catch (DuplicateKeyException e) { return false; // 沒(méi)搶到說(shuō)明是重復(fù)請(qǐng)求 } }邏輯說(shuō)明REQUIRES_NEW會(huì)掛起外層事務(wù)、新開(kāi)一個(gè)插入失敗只影響這個(gè)內(nèi)層事務(wù)外層不受污染。返回false時(shí)外層直接查單據(jù)狀態(tài)返回結(jié)果不再執(zhí)行扣款。代價(jià)是多占一個(gè)連接所以這個(gè)方法必須極短不能在里面做任何查詢(xún)以外的事。參數(shù)說(shuō)明propagation選REQUIRES_NEW而不是NESTED因?yàn)镹ESTED依賴(lài)保存點(diǎn)某些連接池和驅(qū)動(dòng)下行為不一致。業(yè)務(wù)上還有個(gè)細(xì)節(jié)如果占位成功了但后面的轉(zhuǎn)賬失敗了單據(jù)狀態(tài)會(huì)停在 0處理中。這時(shí)不能簡(jiǎn)單刪掉重來(lái)得靠后面的狀態(tài)機(jī)和對(duì)賬處理。4.2 狀態(tài)機(jī)與失敗補(bǔ)償0/1/2 三個(gè)狀態(tài)夠不夠單據(jù)表里我用了三個(gè)狀態(tài)0 處理中、1 成功、2 失敗。夠用但有前提——必須有一套任務(wù)去清理長(zhǎng)期停在 0 的單據(jù)。處理中的單據(jù)意味著“占位成功但結(jié)果未知”??赡艿脑虬ㄟM(jìn)程被 kill、數(shù)據(jù)庫(kù)連接斷開(kāi)、事務(wù)超時(shí)。這類(lèi)單據(jù)不能直接判成功也不能直接判失敗正確姿勢(shì)是查流水如果account_flow里已經(jīng)有這筆order_no的兩條記錄說(shuō)明錢(qián)動(dòng)過(guò)了把狀態(tài)補(bǔ)成 1如果沒(méi)有說(shuō)明事務(wù)回滾了補(bǔ)成 2。這個(gè)判斷依據(jù)流水而不是依據(jù)余額因?yàn)榱魉侵蛔芳拥氖聦?shí)。-- 清理僵尸單據(jù)30 分鐘前還是處理中且沒(méi)有任何流水 SELECT o.order_no FROM transfer_order o LEFT JOIN account_flow f ON f.order_no o.order_no WHERE o.status 0 AND o.created_at NOW() - INTERVAL 30 MINUTE GROUP BY o.order_no HAVING COUNT(f.id) 0;查到之后統(tǒng)一置為失敗并記錄原因。注意這條 SQL 要跑在只讀副本或者低峰期LEFT JOIN GROUP BY在單據(jù)量大時(shí)并不便宜加個(gè)時(shí)間范圍限定比如只掃最近三天。補(bǔ)償邏輯一定要做成可重復(fù)執(zhí)行的。定時(shí)任務(wù)重復(fù)跑、人工手動(dòng)觸發(fā)、服務(wù)重啟補(bǔ)跑都可能發(fā)生。判斷依據(jù)永遠(yuǎn)是“當(dāng)前狀態(tài) 流水是否存在”而不是“上次跑到哪了”。4.3 對(duì)賬 SQL三條查詢(xún)把不平的賬撈出來(lái)對(duì)賬不需要寫(xiě)代碼三條 SQL 基本能覆蓋課程設(shè)計(jì)和中小系統(tǒng)。第一條查單邊賬——單據(jù)成功但流水條數(shù)不對(duì)。-- 成功的單據(jù)流水必須正好兩條不等于 2 的就是單邊賬 SELECT o.order_no, o.amount, COUNT(f.id) AS flow_cnt FROM transfer_order o LEFT JOIN account_flow f ON f.order_no o.order_no WHERE o.status 1 GROUP BY o.order_no, o.amount HAVING COUNT(f.id) 2;第二條查金額不平——出賬和入賬金額必須相等差值不為零就是臟數(shù)據(jù)。-- 同一單據(jù)內(nèi)出賬金額 - 入賬金額 必須為 0 SELECT order_no, SUM(CASE WHEN direction 1 THEN amount ELSE -amount END) AS diff FROM account_flow GROUP BY order_no HAVING diff 0;第三條查余額斷裂——每條流水的balance_after應(yīng)該等于上一筆的balance_after加減本筆金額賬戶(hù)表當(dāng)前余額應(yīng)等于最后一筆流水的balance_after。第三條 SQL 稍長(zhǎng)思路是用窗口函數(shù)取上一行。-- 8.0 以上用 LAG 取上一筆余額驗(yàn)證流水鏈?zhǔn)欠襁B續(xù) WITH f AS ( SELECT account_no, id, direction, amount, balance_after, LAG(balance_after) OVER (PARTITION BY account_no ORDER BY id) AS prev_balance FROM account_flow ) SELECT * FROM f WHERE prev_balance IS NOT NULL AND balance_after prev_balance (CASE WHEN direction 2 THEN amount ELSE -amount END);三條查詢(xún)都返回空集才算這批數(shù)據(jù)是干凈的。前兩條可以隨時(shí)跑第三條在流水量大時(shí)要限賬戶(hù)否則窗口函數(shù)會(huì)掃全表。5. 避坑排查死鎖、負(fù)余額和“事務(wù)沒(méi)回滾”的五個(gè)現(xiàn)場(chǎng)這一章是我自己在跑這套代碼時(shí)踩到的五個(gè)現(xiàn)場(chǎng)按出現(xiàn)頻率排。每條都按“現(xiàn)象 → 原因 → 解決”寫(xiě)癥狀描述盡量貼近你會(huì)在日志里看到的那行字。5.1 現(xiàn)象并發(fā)壓測(cè)幾分鐘后開(kāi)始報(bào) Deadlock found現(xiàn)象50 并發(fā)雙向轉(zhuǎn)賬前 30 秒正常之后日志里零星出現(xiàn)Deadlock found when trying to get lock; try restarting transaction接口返回 500重試后又能成功。原因兩個(gè)方向的事務(wù)加鎖順序相反。A→B 先鎖 AB→A 先鎖 B交叉等待形成環(huán)路。InnoDB 檢測(cè)到環(huán)路會(huì)主動(dòng)殺掉代價(jià)小的那個(gè)事務(wù)被殺的拋出這個(gè)異常。另一個(gè)可能來(lái)源是SELECT ... FOR UPDATE沒(méi)走到account_no索引退化成鎖一批記錄甚至全表鎖范圍一大任何交叉都可能死鎖。解決按賬號(hào)字典序統(tǒng)一加鎖這是根本解。同時(shí)確認(rèn)執(zhí)行計(jì)劃EXPLAIN SELECT * FROM account WHERE account_no ? FOR UPDATE;應(yīng)該顯示typeconst或eq_ref。如果業(yè)務(wù)層無(wú)法保證順序比如批量代發(fā)把批量拆成單筆或者用SELECT ... FOR UPDATE時(shí)一次性按IN排序取回讓數(shù)據(jù)庫(kù)按索引順序加鎖而不是按IN列表順序。5.2 現(xiàn)象A 賬戶(hù)扣了錢(qián)B 賬戶(hù)沒(méi)收到單據(jù)狀態(tài)是成功現(xiàn)象對(duì)賬 SQL 查出單邊賬transfer_order狀態(tài)為 1但account_flow只有一條出賬記錄B 的余額沒(méi)變。原因入賬和出賬被拆到了兩個(gè)事務(wù)里。常見(jiàn)寫(xiě)法是扣款方法加Transactional入賬方法也加然后 Service 里順序調(diào)用。兩個(gè)方法各自提交中間任何失敗都會(huì)留下半成品。另一種是同一種病在try-catch里把入賬的異常吞了只打了日志事務(wù)照常提交。解決一筆轉(zhuǎn)賬的所有數(shù)據(jù)庫(kù)寫(xiě)操作必須在同一個(gè)事務(wù)邊界內(nèi)debit、credit、兩條流水、單據(jù)狀態(tài)更新全部由最外層的Transactional覆蓋。捕獲異常的地方只允許兩種處理要么原樣拋出觸發(fā)回滾要么記錄后拋出。任何“catch 了只打日志”的代碼都是定時(shí)炸彈。5.3 現(xiàn)象余額出現(xiàn)負(fù)數(shù)但業(yè)務(wù)校驗(yàn)沒(méi)報(bào)錯(cuò)現(xiàn)象定時(shí)對(duì)賬發(fā)現(xiàn)某賬戶(hù)balance -0.01查流水最后幾筆扣款都成功但當(dāng)時(shí)余額已經(jīng)不夠了。原因先SELECT查余額判斷夠不夠再UPDATE扣款。兩個(gè)動(dòng)作之間有窗口另一個(gè)事務(wù)插進(jìn)來(lái)把余額花掉了你的判斷基于舊值扣款照常執(zhí)行。這是最經(jīng)典的檢查與使用分離問(wèn)題TOCTOU。還有一種情況是CHECK (balance 0)在 5.7 上不生效應(yīng)用層又沒(méi)做條件更新直接扣穿。解決把判斷寫(xiě)進(jìn)UPDATE的WHERE里也就是AND balance #{amount}靠影響行數(shù)判斷成敗。這比任何鎖都輕。再加數(shù)據(jù)庫(kù)CHECK兜底確認(rèn)版本 8.0.16以及一條每日巡檢 SQL查balance 0的賬戶(hù)哪怕理論上不可能也要讓它報(bào)警。5.4 現(xiàn)象Transactional明明加了拋異常后數(shù)據(jù)還是落庫(kù)了現(xiàn)象故意在轉(zhuǎn)賬后拋RuntimeException期望回滾結(jié)果余額被改了單據(jù)也變成成功了。原因五種常見(jiàn)失效場(chǎng)景——方法不是publicSpring 代理攔不到同一個(gè)類(lèi)里this.method()自調(diào)用走不到代理異常被catch后沒(méi)重新拋拋的是受檢異常而沒(méi)配rollbackFor類(lèi)沒(méi)有被 Spring 管理自己new出來(lái)的對(duì)象。這五種現(xiàn)象一樣、原因各異排查時(shí)按這個(gè)順序?qū)?。解決自調(diào)用場(chǎng)景把方法拆到另一個(gè) Bean受檢異常統(tǒng)一配rollbackFor Exception.class類(lèi)上加Service且確保包掃描覆蓋最省事的驗(yàn)證方式是在事務(wù)方法里手動(dòng)拋一次異常看數(shù)據(jù)庫(kù)有沒(méi)有變化兩分鐘能排掉大部分疑慮。提示調(diào)試事務(wù)是否生效把日志級(jí)別開(kāi)到logging.level.org.springframework.transactionDEBUG能看到Creating new transaction/Rolling back這類(lèi)關(guān)鍵行比讀代碼快。5.5 現(xiàn)象對(duì)賬差一分錢(qián)反復(fù)對(duì)數(shù)都對(duì)不上現(xiàn)象總額守恒的校驗(yàn)差 0.01逐個(gè)賬戶(hù)查又都能對(duì)上只有某些涉及手續(xù)費(fèi)的記錄不平。原因double參與金額計(jì)算。0.1 0.2在二進(jìn)制浮點(diǎn)里不等于0.3這個(gè)誤差會(huì)在多次累加后變成一分錢(qián)。另一種原因是在中間步驟就setScale四舍五入每步都舍一次誤差累積。還有一種BigDecimal.equals()比較時(shí)把scale也比了1.0和1.00判不相等導(dǎo)致校驗(yàn)邏輯誤判。解決金額全程BigDecimal且只用字符串構(gòu)造new BigDecimal(0.01)絕不用new BigDecimal(0.01)。比較用compareTo() 0。舍入只在最終落庫(kù)那一刻做一次setScale(2, RoundingMode.HALF_UP)。手續(xù)費(fèi)在什么環(huán)節(jié)扣、按什么基數(shù)算寫(xiě)進(jìn)注釋別靠人記。6. 壓測(cè)驗(yàn)證用 200 并發(fā)和三條斷言驗(yàn)收賬平不平跑通單筆轉(zhuǎn)賬只能說(shuō)明代碼能編譯驗(yàn)證賬對(duì)不對(duì)還得靠并發(fā)。我一般會(huì)寫(xiě)個(gè)最土的壓測(cè)腳本先制造混亂再用斷言收口比看一堆日志有說(shuō)服力。#!/usr/bin/env bash # 200 個(gè)并發(fā)請(qǐng)求每個(gè)請(qǐng)求單號(hào)唯一同時(shí)故意發(fā) 50 個(gè)重復(fù)單號(hào)試冪等 BASEhttp://localhost:8080/api/transfer seq 1 200 | xargs -P 50 -I{} curl -s -o /dev/null -w %{http_code}\n \ -X POST $BASE \ -H Content-Type: application/json \ -d {\orderNo\:\T20240{}\,\from\:\ACC0001\,\to\:\ACC0002\,\amount\:\1.00\} # 冪等驗(yàn)證同一個(gè)單號(hào)打 50 次最終只應(yīng)有一條單據(jù)、兩條流水 seq 1 50 | xargs -P 50 -I{} curl -s -o /dev/null \ -X POST $BASE \ -H Content-Type: application/json \ -d {orderNo:IDEMPOTENT-001,from:ACC0003,to:ACC0004,amount:2.00}腳本里-P 50是并發(fā)度-w %{http_code}把狀態(tài)碼打出來(lái)方便統(tǒng)計(jì)失敗率。跑完先看接口層200 個(gè)請(qǐng)求里成功多少、超時(shí)多少、5xx 多少。低于 95% 成功率就先去查鎖等待和連接池別急著分析數(shù)據(jù)。數(shù)據(jù)層的驗(yàn)收是三條斷言全過(guò)才算這套實(shí)現(xiàn)站得住。-- 斷言一總額守恒轉(zhuǎn)賬不創(chuàng)造也不銷(xiāo)毀錢(qián) SELECT SUM(balance) AS total_after FROM account; -- 應(yīng)等于壓測(cè)前記錄的初始總額 -- 斷言二成功單據(jù)的流水凈額必須為 0 SELECT order_no, SUM(CASE WHEN direction 1 THEN amount ELSE -amount END) AS diff FROM account_flow GROUP BY order_no HAVING diff 0; -- 斷言三冪等單號(hào)只被真正執(zhí)行一次 SELECT COUNT(*) AS flow_cnt FROM account_flow WHERE order_no IDEMPOTENT-001; -- 應(yīng)為 2斷言一是最硬的那條。壓測(cè)前后各跑一次兩個(gè)數(shù)字必須完全相等差一分都說(shuō)明有事務(wù)沒(méi)回滾干凈或者有寫(xiě)入繞過(guò)了流水。斷言二驗(yàn)證每筆單據(jù)內(nèi)部平衡斷言三驗(yàn)證冪等占位是否真的擋住了 49 次重復(fù)請(qǐng)求。觀測(cè)指標(biāo)建議同時(shí)盯住四個(gè)用一張表記下來(lái)比憑感覺(jué)判斷靠譜。指標(biāo)從哪看健康區(qū)間異常時(shí)先查T(mén)PS壓測(cè)工具匯總穩(wěn)定不抖連接池、慢 SQLP99 響應(yīng)時(shí)間壓測(cè)工具匯總小于鎖等待超時(shí)的一半innodb_lock_wait_timeout死鎖次數(shù)SHOW ENGINE INNODB STATUS\G的 LATEST DETECTED DEADLOCK0加鎖順序、索引命中活躍連接數(shù)Hikari 的activeConnections小于池上限的 80%事務(wù)是否過(guò)長(zhǎng)這套流程我現(xiàn)在每次改完轉(zhuǎn)賬相關(guān)代碼都會(huì)完整走一遍哪怕只是把一個(gè)SELECT改成UPDATE。因?yàn)椤翱雌饋?lái)等價(jià)”的改動(dòng)在并發(fā)下經(jīng)常不等價(jià)而賬目類(lèi)的 bug 一旦上線(xiàn)損失的不是性能而是可信度。上面這些建表語(yǔ)句、Service 骨架和對(duì)賬 SQL 都來(lái)自這份模擬銀行賬戶(hù)轉(zhuǎn)賬系統(tǒng)的源碼包改一改就能塞進(jìn)自己的課程設(shè)計(jì)或者業(yè)務(wù)模塊里跑起來(lái)先從單筆跑通再上并發(fā)腳本別跳步。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲一区二区三区麻豆传媒| 噜噜在线| 欧美性五月| 亚洲另类久操网| 国产精品午夜福利亚洲综合网| 天堂在线一区二区| 熟妇在线视频一区二区| 福利操逼| 中国国产精品一区视频| 久久老女人| 日产操逼| 东京热91| 中文不卡视频| 欧美日本视频一区| 91天堂色男人的天堂| 欧美亚洲影视| 中文啪啪视频| 91蜜臀在线久久久久| 日韩欧美中文| 亚洲aV无码成人在线观看| 女欧美一区二三区| 91久久青青草原精品| 高清无码91| 无码操逼天堂| 欧美高清在线| 一本色道久久综合亚洲二区三区| 青青草日韩免费观看高清在线| 欧美性暴力猛交XXXX| 五月婷婷综合激情| 日韩午夜啪啪视频| 夜间福利片1000无码| 成人线上超碰| 亚洲AV成人精品网站在AV| 色淫网站优优视频| 久久久久女教师免费一区| 97情超碰色| 一区| 校园春色欧美| 91劲爆| 爱妻综合网| 国产白丝在线| 久草在| 色麻豆AV| 中文字幕乱偷人妻久久艾草网| 一区二区三区四区久久视1| 快点操死我| 日韩二三区| 亚洲免费97免费| 97视频620| 伦在线97| 欧美色图99| 亚洲欧美校园| 欧美日韩在线小说| 亚洲字幕一区二区| 国产精品一二三在线看| 日本三级中国三级99人妇网站| 人人天天干干| AV色五月天| 久久久久久九九九九九九| www.人人摸在线视频| 亚洲成人在线资源| 国产91影院| 69XX一中文字幕人妻91| 综合国产影视三级| 精品国产人成在线| 久久精品人人做人人看| 婷婷五月天激情网| 国产欧美伊人| 死我十八禁| 九九九九精品精| 在线日韩日本亚洲国产| 性爱动态120秒| 国产精品熟女AV中文字幕在线播放| 日本丝袜美腿人妻九九| 制服丝袜第二页| 99re黄| 国产传媒午夜理伦精品| 国产视频一区二区免费| 国产日韩精品一区二区三区| 91精品婷婷国产综合久久| 成人性交午夜免费片| 国产成人91一区二区三区| 亚洲一欧洲中文字幕在线| 国内精品伊人久久久久影院会| 999狠狠综合| 国产亚洲色婷婷99精品91| 激情视频图片| 久久久久久久久久va| 婷婷丁香五月综合| 久久国99999| 亚州精品人妻一二三区| 精品国产Av无码久久久亚洲| 亚洲精品久久久久久久久豆丁网| 男人的天堂三级| 欧美综合网| 亚乱色| 日日天天久久啊啊aaa| 91欧美巨乳| a亚洲欧美色欲| 中国一区二区亚洲人妻| 亚洲中文电影| 免费看黄视频亚洲网站| 青青草视频爽一爽| 精品夜夜澡人妻无码AV| 97人人草| 99rre在线精品99re8| 美女尤物人人操| 中文字幕视频在线观看一区二区| AV天堂因数| 91深夜夜| 国模91| 久操操AV电影| aaa淫乱视频| 熟女激情综合网| 综合久久婷婷| 亚洲熟女一区二区| 一起草三级AV电影在线观看| 亚洲情色91| 超碰视97中文| 留下AⅤ黄色片| 都市激情人妻一区二区青青操视频 | 99色天堂| 人人操超碰在线| 亚一综合久久久久久久久久| 免费亚洲国产精品久久一区| av天堂天堂av日韩| 大香蕉琪琪日本女优不卡| 成人无遮挡毛片免费看| 亚洲日本大香蕉1| 亚洲天堂7777| 日本二区不卡| 刺激性视频黄页| 啊啊啊啊啊啊好多水| 五月天伊人| 五月情色天| 色综合91| 国产精品日本无码A片| 欧美性,色九九| 色牛aV| 美女黄页| 九九精品无码专区免费| 中文字幕欧洲有码| 精品国产嫩穴视频| 亚洲国产欧美一区二区潘金莲| 九热大香蕉| 欧 美 自 拍 偷 拍| 91久久堂| 亚洲国产日韩欧美熟妇在线| 9久热这里只有精品| 女同亚洲欧美一二三区久久电影| 999精品国产高清一区二区| 天天看高清麻豆| 精品一区二区成人动漫| 伊人黄色片| 亚洲熟妇白浆无码AV| 91黑丝露脚| 涩综合导航| 成人精品水蜜桃久久久久久久| 极品极品色影院| 黄页| 91n.欧美| 99热aaa| 黑人黄片在线免费观看| 亚洲电影中字一区二区| 亚洲色婷婷久久91| 啊啊啊啊嗯嗯在线久久久| 97精品国产97久久久久久免费| 国产一级特黄大片处女| 日韩精品午夜操呦呦不卡影院| 国产精品久久久视频| 99国产精品视频尤物| 欧美激情内射| 日韩中文字幕宗合在线| 超碰在线974| 精品久久久久av影院| 久久久久久加勒比| 超碰在线1234区| 亚洲色图亚洲无码强奸乱伦| 天天综合网合集91| 久艹伊人精品综合在线| 激情综合网激情五月天| 亚洲欧美国产成人综合不卡| 香港澳门日本三级网站| 久久久青青草| 久久久精品,3| 国产精品日日摸天天碰| 97爱碰| 操九九九九九九| 日韩精品一区二区三区色欲 | 激情五月婷婷综合| 国产亚洲禁久一区二区| 操逼天美3区| 国产精品ww久久| 激情内射| 99热这里只有精品1| 97视频在线观看高清资源| 另类小说五月天| 精品一区二区成人| 亚洲导航深夜福利| 人人干黄色| 日韩性爱小视频| 极品色综合| 啊啊在线| 日韩在线电影| 亚洲毛片基地专区| 草草草视频在线免费看| 丝袜美腿亚洲| 人人操人人93| 欧美成人免费在线观看| 69XX一中文字幕人妻91| 亚洲字幕一区二区| 韩国午夜理伦三级好看| 日本视频在线观看污污污| av强奸乱轮| 琪琪精品免费一区二区三区 | 成人欧美日超碰| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 精品久久久一本一道| 2003天天干夜夜操| 欧美亚洲韩国视频十五区| 色爽——AV| 麻豆区久久久久亚| 久久久久熟女| 久久久久久久97| 免费国产视频| 操逼逼一区视频| 久久黄色视频一区二区三区| 探花熟女,姿勢到位,體驗感也到位| 亚洲av影音先锋| 亚洲精品aa久久伊人| 久久欧美性爱视频| 九九热精品免费视频| 亚洲网自拍| 国产一区二区久久| 骚女高跟AV在线| 国产夜夜艹| 蜜臀AV成人精品蜜臀| 91欧美性| 久操免费观看| 欧美性爱免费短视频| 伊人激情五月天一区二区| 操99| 亚洲限制级| 亚洲区限制级 99| 超碰人人干天天射| 男女做爰猛烈动高潮A片免费应用| 国产精品毛片?v一区二区三区| 日本操色导航| 久操九九九九| 激情文学 亚洲图片| 国产超碰欧美| 五十路六十路七十路熟婆| 欧美成人一级免费电影| 一道本久久棕合爱| 香蕉色网| 国产精品成人无码a v毛片| 亚洲av影院在线观看| 亚洲欧美一区二区三区在钱蜜桃| 无码人妻系列少妇| 91性色| 无码高清专| 午夜精品久久久久久久男人的天堂 | 日韩精品人妻中文字有码在线| 精品大全99999| 内射小黄片| 久久色人体| 啊啊啊啊,啊啊好多水| 欧美日韩插逼视频| 欧美色图天堂网m| rivers-china.com| 18禁免费视频| 欧美精品双插| 国产成人拍国产亚洲精品| 91站街按摩店老熟女熟女| 亚洲自拍欧美国产首页网曝| 天天澡天天爽日日AV| 国产做?爰片久久毛片?片美国| av操操不卡| 天天亚洲| 99这里都是精品| 视频在线观看青青99国产| a'v在线资源| 九九香蕉网| 中文字幕av一区二区三区人妻少妇| 国产主播福利| 97这里都是精品| 亚洲人综合19| 欧美色色色| 久久精品无码不卡| 99久热| 91丰满| 在线无码视频| 99久久9| 日本天天干天天日一区| 国产精品久久久久久久毛片1| 亚洲成人一二三区| 久久东京伊人一本到鬼色| 久久久不能久久久久| 九七色图| 青青网三级视频| 久久久久久久久久久久色网| 亚洲欧美精品91| 亚洲欧美伦综合| 蜜臀av在线播放一区二区三区| 精品人妻一区二区三区蜜桃视频| 中文字幕一区av| 国产白丝精品在线观看| 男人的天堂2000| 日韩欧美一级特黄大片| 人妻精品一区二区| 日本免费不卡二区| 一二三四视频中文字幕在线看| 欧亚第一综合网| 国产一进一出视频网站| 在线小视频| 人妻熟女av国产网站| 日韩综合第八区国产精品| 91精品丝袜在线观看| 好一吊区二区| 台湾佬激情综合| 伊人一区二区在线播放| 色香综合天天影视综合 | 亚洲日本激情| 婷婷久久久精品| 日韩欧美女优电影| 国产一在线观看| 超碰97.com| 伊人综合色网| 乱伦AVxx| 久久精品| 超碰诱惑| 精品一区二区麻豆| 久久女人一区二区三区| 日本黄页视频在线观看| 99re这里只有精品2| 91东京热男人的天堂| 日韩综合97P| 免费观看啪视频| 欧美色综合| 男人的天堂日韩| 可以免费观看的av| 国产91精品福利在线| 大香蕉淫人| 日日A∨| 抽插无码高清一区| 精品国产一区二区三区香蕉欧美| 午夜一区| 91美女高潮| 91红杏| 99无码视频| 在线看的av| 天天操妹子| 精品中文日韩字幕视频| 欧美日韩国产中文精品字幕自在自线,| 成人av影院在线观看| 上床啊啊啊| 久久日本熟女精品一区| 久久综合精品一区二区三区| 激情五月婷婷| 综合自拍| 激情久久久| www.久久制服糖| 人人操人人肉久久精品| 91综合无码| 玖玖大干人妻| 亚洲欧美啪啪| 日本高清加勒比| 亚洲第一页欧美| 免费看毛片操穴| 日韩av免费一级电影| 亚洲熟久久| 激情图片亚洲色图| 色好看av| 加勒比日本在线| 91在线页| 日本美女性生活久久久久久久| 欧美特大黄一级片片免费| www国产天美久久久| 日韩性爱视频在线免费观看| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 国产女人高潮嗷嗷嗷叫小说| 亚洲人妻中文在线视频| 日韩综合无码色欲vv| 国产强奸乱伦欧美| 大香蕉免费3| 国产综合日韩伦理| A片大香蕉在线| 日韩三级在线观看网站| 在线有码中文字幕| 日韩亚洲精品一区二区| 午夜120视频在线观看| 久久亚洲欧美中文字幕国语| 又大又长又粗又爽又黄| 9999免费精彩视频| 亚洲日本成人动漫| 性欧美体内射精| 久久AV无码1区2区3区| 亚洲自拍欧美国产首页网曝 | 乱伦图一区| 日日噜噜夜夜狠狠视频无| 一级二级三级黑人无码| 国产色呦呦| 国产自偷自拍一区| 密桃99999| 中文字幕版| 久久久久久久久久精| 人妻素股| 欧美97| 岛国激情视频在线观看| 自拍偷拍2025在线观看| 六月婷激情福利天堂69| 蜜臀亚洲中文| 超碰在线在公开超碰在线在公开| 久夜视频| www.yeyecao| av凤凰久久久| 夜夜狼人妻| 亚洲综合射| 中文字幕第二页| 东北女人无套内谢视频| 天天色天天干天天射| 亚洲精品亚洲人成在线麻豆| 欧美拳交在线播放| 久久同城AV| 久久粉色| 美國A片| 国产精品一区人妻精品阁在线| 中文字幕88av在线| 91美女片在线| 国产成人无码啪| 看日韩美女二区三区免费操逼视频| 9/A片| 黄久在线| 一级性爱视频免费在线| 超碰人妻在线| 熟女露脸激情自拍视频| 亚洲一区操| 日韩啪啪网| 久久人妇| 国产丝袜欧美在线视频| 欧美国产日韩清纯唯美| 校园春色亚洲无码| 国产精品视频91久久| 717影院理论午夜伦八戒| 色爱综合网欧美| 人妻第一页| 在线无码操| 韩国女主播青草在线| 神马麻豆福利院| 国产三级多多影院2022国产AA一级毛片无码| 六九九九| 妇女一区二区三区| 97婷婷色| 欧美肥臀在线| 久久99午夜精品一区人妻| 91美乳| 97超碰超碰| 超碰人人妻| 欧美激情精品久久久| 亚洲精品尤物yw在线影院| 嗯嗯,啊啊,国产精品| 欧美的精品的视频| 自偷自拍的亚洲视频| 欧美 综合 亚洲| 最新国内自拍av免费| 人人爽夜夜操| 人人贴人人摸| 日本999精品| 国产又黄又粗的视频| 97亚洲综合电影| 亚洲97| 日韩天美| 性无码专区2020| 亚洲一二三精品久久网 | 亚洲操逼网| 亚洲色图8| 操99| 久热热| 老鸭窝亚洲毛片| 色综合加勒比| 91麻豆天美国产| 成人av福利在线观看| 无码视频一区二区| 国精精品无码一二三区水多多| 99re这里| 在线国产探花| 91人妻少妇| 99999精品成人| 色欲Av人妻精品一区二| 国产乱码精品久久久久久| 6080YYY午夜理论片在线观看| 1二区9| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 狠狠操夜夜操蜜桃视频三区| 国产精品 视频| 97超碰色屌| 亚洲va有码在线天堂| 精久久久| 青青草原人妻| 日韩无码操逼片| 91中出在线| 天天肏美女| 手机在线中文字幕国产| K8久久久久| 东北黄色电影| 日韩不卡毛片Av免费高清| 黄色成年| 天天日天天屌天天操| 国内毛片无码一级毛片| 我要去看2个日本美女.com曹逼| 国产亚洲日本| av大香蕉| 日本视频一区二区三区| 亚洲图片欧美色| 亚洲清纯唯美| 亚洲熟妇乱女区二区三区| 久操网无码在线| 国产欧美另类久久久精品课程| 清纯唯美激情四射| 秋霞欧美性爰视频| 人人操 欧美| 日本久久久久久久久久| 涩涩久久精品| 色月天AV导航| 嗯嗯啊在线视频| 大香蕉久| 欧美性爱日韩高清| 东京热毛片177b2viP| 1024午夜激情男人的天堂| 成年男人的天堂| 日韩成人网址| 亚洲av影院在线观看| 日韩电影在线观看网址| 色综合天天爱去电影网| 青青青草伊人精品| 日本人妻天堂网站在线播放| 久久久工口| 啪啪啪综合网| 色色色色网站| 欧美性爱一级操| 国产久久成人| 性爱网站一区二区| 日本熟妇浓毛hdsex| 伊人九九九| 狠狠97| 国产第11页| 99re95| 久久人妻四季| 高清不卡一二三区视频......| 人人扣人人操| 久99热| 无码抄逼网| 韩国一级做A片免费的| 天堂俺去俺来也www久久婷婷| 午夜男女爽爽大片免费观看| 中文AV制服乱伦| 97在线视频免费| 精品黄色电影| 人人操人人93| 国产av激情无码久久天堂| 精品一级毛片在线观看| 91综合色噜噜| 久久精品国内Av熟女高清| 午夜国产成人精品视频| 欧美成年人性爱视频免费观看| a'v在线资源| 绯色一区二区三区不卡少妇| 91人妻人人澡人人爽人人精品| 激情小说亚洲色图| 91国产操逼视频| wwwxxx日本爽| 日本一区二区做爱的视频| 99精品久久久久久久婷婷| 91丨熟女丨丰满熟女| 熟女突然公开看18禁影片| 中文字幕在线日亚洲9| 国产免费久久久久| 国产黄a三级三级三级av在线看| 天天欧美欧美亚洲网| 小草精彩毛片| 国产精品久久久777| 欧美超碰人妻97| 激情另类激情| 免费操逼91| 日日AAvv| 亚洲资源网| 中文字幕国产| 日产欧美电影一区二区三区| 九九久久一区二区伦理| 99热超碰| 97自拍一区| 日韩有码回春沙龙第一页| 91人妻人人澡人人爽人人精品| 中文字幕一区二区视频在线观看| 人人操,人人插| 国产精品无码AV网站| 亚洲综合春色| 久久熟女久| 97在线视频免费| 天天搞在线综合网| 青青草视频久久| 亚洲一二三| 国产精品乱码久久久久| 亚洲国产精品9999在线观看| 操一区| 日日日骚女人精品| 97干在线| 91久操| 亚洲综合校园春色| a片在线播放| 婷婷爱五月| 天天情欲宗合网| av爱爱爱| 亚洲 图片 综合91| av影院十区| av在线观看不卡网站| 亚洲 91 在线| 97久久超碰日韩精品| 91午夜无码| 97人肏| 亚洲综合伊人无码久久| 操操操日本的逼| 欧美亚洲国产自久久| 91亚洲网站| 欧美日韩性爱操大逼| 久偷拍| 搡老女人老91妇女老熟女| 亚洲啪啪性视频| 成人天天爽| 91人妻精华帖| 三级网站超变态精品| 日本久久女同性恋视频| 嗯啊不要在线| 精品玖九九久| 久久久中文| 亚洲精品九九九九九九| www欧美性爱| 五月天亚洲网| 无码乱人伦中文视频| 久草男人天堂| 五十路三级片| 大屁股熟女一区二区三区| 国产特级毛片AAAAAA高潮流水| 午夜天堂网| 亚洲性爱成人| juliaann丝袜大战黑鬼| 八戒无码国产午夜福利| 一直超碰| 91操人| 超碰97人人乐| www.99热| 欧美日韩在线视频网站| 91欧美长吊| 亚洲免费成人在线高清无码视频| 麻豆精品天美| 午夜福利视频在线一区| 96一区二区三区| 99只有精品| 黄色大片视频在线免费看| 男人天堂站| 亚洲字幕一区二区| 亚洲男人天堂2| 99热色精品| 国产强奸乱伦欧美| 97精品综合久久网| 日韩乱伦视频| 91熟女丨老女人| 色婷婷av在线观看| 国产激情视频一区区三区| 老子午夜伦不卡影院| 九热视频| 亚洲丝袜综合| 抽插爽| 国产Aα| 97超级色碰碰| 91蜜臀在线久久久久| 精品国产Av无码久久久亚洲| 是还免费视频1727我| 国产97视频免费观看| 神马久久69| 九九99久久| 精品无码久久久久久久久果冻糖心| 人人摸人人干| 国产综合网站在线播放 | 国产在线视频午夜精华在| 嗯嗯,好大,好爽,好骚 | 九九久久精品| 精品国产乱码| 欧美综合色| 97se综合网| 国产亚洲色婷婷久久99精品91葵花宝典| 蜜桃久久一区| 69综合网| 丁香五月影院| 欧美精品二区视频在线| 99抽插| 精品色色| 国产一区二区三区白丝| 精品欧美乱码久| 男人的天堂VA在线| 夜夜嗨AV一区天天| 成人麻豆av电影网站| 欧美色视| 欧美人人天天网| 麻豆天美国美国产| 日本性爱不卡视频| 日韩免费a级毛片无码a∨| 黄色一区三区| 熟女天天干| 久久婷婷伊人| av日韩在线观看电影| 亚洲天堂精品日韩电影| 久久精品噜噜噜成人看免欧美大片| www四虎| www.婷婷五月天| 高清成年美女黄网站免费大全| 91美女视频| 久久网亚洲| 九九九九免费高| 性色乱AV一区二区| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 欧美色视频在线| 男啪女色黄无遮挡免费观看| 色偷偷综合91久久噜噜| 不卡一区视频| 精爱久久| 久久9精品视频| 日韩啪啪网| 日本肉体xxxx裸交| 青娱乐亚洲自拍| 岛国毛片在线观看免费| 97啪啪| 黄色成年| 97chaopenrihan| 爱妻综合网| 欧美 亚洲 另类 综合| 啪啪视频mP4| h在线看免费版在线看| 国产精品久久久久久无码红治院| 亚洲无 码A片在线观看麻豆| 亚洲男人的天堂网| 欧美日韩人妻婷婷一区| 五月天激情网站| 日本三级久| 国产色呦呦| 日亚韩精品视频二区三| 亚洲色图欧美视频| 桃花色涩综合影院| 欧美1区二区三区公司| 免费?级毛片无码?∨蜜芽试看| 中国熟妇| 97视频在线| 欧美九九九| 国产久久久久久| 91美女视频在线观看| 久草资源在线| 久久亚洲中文字幕视频| 69国产对白刺激| 少妇一级婬片免费放一级a性色.| 以及麻豆国产入口在线观看免费| 精品中文字幕第一页| 交换娇妻呻吟声不停中文字幕| 日本成人A片免费看| 国产精品麻豆视频网站| 婷婷91| 大香蕉九九| 97国产精品国| 欧美一区二区传媒| 欧美激情黑人| 婷婷丁香人妻| 中国操逼无码| 中文字幕丝袜国产第一页不卡| 久久东京国产精品视频| 97在线精品| 嗯~啊~快点 死我视频| 久久AV无码1区2区3区| 美女丝袜激情小说| 78操B| 影音先锋少妇| 粉嫩绯色AV一区二区在线| 亚洲丝袜二区| 欧美日韩一干二干| 91久久国产精品| 中文字幕欧美丝袜07资源| 91丨九色丨国产丨人妻在线 | 强奸乱伦αv片| 天天综合亚在线| 久久色一区二区| 在线天堂资源亚洲| 欧美成熟性爱精品| 欧美日韩91| 大香蕉99热| 欧美性夜| 亚洲无码免费看| 蜜色网色哟哟| 欧美一品道| 91性高朝久久久久久久久| 人人看人人插| 天天色综合图片| 九草九九九| 亚洲高清视频在线免费观看| 一区二区娱乐网站| 久久精品老司| 蜜桃狠狠色伊人亚洲综合网站| 欧美日韩色综合网| 伊人大香蕉在线| 懂色av中文字幕| 人人操肉肉| 91狠婷| 97久久超碰日韩精品| 国产日韩欧美中文在线播放| 按摩中文字幕| 夜夜无码| 殴美在线AⅤ| 欧美国产日韩清纯唯美| 一本色道久久综合亚洲二区三区| 狠狠中文字幕| 精品网站9999| 天天综合网日韩| 综合网色| 91蜜臀人妻中文字幕在线| 亚洲图片婷婷五月天| 人人爱夜夜爱| 最近二区三区视频大全| 久99热| 欧美日韩97在线| 粉嫩不卡一区二区性爱| 天天插天天射| 狠日欧美| 久久久999日本大片| 啊啊啊水好多| 天天插天天干| 日韩欧视频| 日本狠狠干| 噜噜噜噜天天狠狠| 色婷婷电影网| 99超碰网| 91蜜桃婷婷狠狠久久综合9色| 久久9久久| 久操不卡视频| 亚洲丝袜少妇在线| 99久久久99久久91熟女| 九九九九九九九九九国产精品 | 成年女人黄网站| 校园春色亚洲无码| 91高清无码下载| 青青草中出视频| 丁香五月婷婷基地| 欧美日综合| 亚洲国产第一页综合视频| 欲香欲色综合天天伊人| 超碰97欧美在线| 精品免费一区| 91网站18在线| 911av网站免费观看| 狠狠干妹子| 99热在线播放| 亚洲狠| 91九色丨国产丨爆乳| 免费中文综合精品| 欧美色色人| 精品久| 99操逼| 国产sv美女内射| 色情五月综合婷婷| 男人兔费天堂| 天堂日本亚洲欧美| 在线观看亚洲成人精品| 操逼操逼视频操逼| 嗯~啊~快点 死我视频免费看网站| 久久久久白虎| 丝袜剧情| 97碰碰色| 青青青国产| 激情无码日韩| 99超碰碰| 国产免费大片| 亚洲暴力强奸AV| 欧美日韩国产精品久久色婷婷| 日韩精品一区二区三区四虎影视| 午夜在线播放| 欧美亚洲成人在线一区二区三区| 在线无码操| 成人一二| 天天干夜夜| 色性欧美| 在线可观看的黄色网址| 97精品97| 国产精品无码在线| 91少妇人妻| 九九人妻| 麻豆天美国美国产AV| 青娱乐国产盛宴视频| 99久在线精品99re8蜜桃| 青青草色情网站视频| 天天日天天爽| 在线看的av| 日韩一二三区| 神马久久69| 91是天天| 日韩成人大片一区二区| 中文字幕天堂在线| 91亚洲网站| 国产精品久久久久久久免牛肉蒲团 | 欧美极品少妇| 国产日本熟女顶级一区二区三区视频 | 91亚州欧美| 99热精品在线| 乱伦图一区| 国产91av在线播放| 久久久久久人体| 99re在线视频| 九九自拍伦理| 超AV色女| 夜夜操2028| 强奸乱伦大香蕉网| 在线看的av| 黑人美精品 A片| 97干在线| 婷婷色香伊人| 欧美高清在线| 亚洲熟妇综合久久久久久| 开心六月色| 日本特黄f c2| 婷婷亚洲综合| 精品国产www久久| 一区二区三区成人高清视频| 私人尤物在线精品不卡| 亚洲欧美黄| 精品久久久久久久| 欧美久久人体| 天天在线91| 欧美在线 亚洲| 精品一国2| 啊啊啊啊啊啊啊啊啊啊在线观看| 啊啊啊啊啊啊啊国| 久九干| 九九AV| 激情丁香婷婷| 色99视频| 欧美视频在线第3页| 91一起操| 99这里有精品视频| 久久婷婷五月综合| 午夜免费视频1000| 亚洲情色91| 美女刺激久久国产欧美| 日韩精品区二区三区不卡| 午夜男女爽爽爽在线视频| 成人黑料社久久| 大香网伊人久久综合| 欧美性爱伊人| www.狠狠操| 97人人草| 九九热免费国产视频婷婷伊人五月 | 亚洲欧美91| 日韩欧美女求操每天更新| 中文字幕在线免费观看 | 97人人模人人爽人人| 欧美日韩中文亚洲v在线综合| 91干熟女| 久久色人体| 厕所偷拍在线| www.91欧美| 中文一区在线日| 成人AV在线网站| 色99999| 欧美日韩午夜精品一区二区三区 | 大香蕉97久久| 九九热超碰97亚洲最新香蕉| 国产后入内射| 日日爽熟女| 日本操逼无码| 亚洲自拍天堂| 99热精品在线播放| 亚洲天堂自拍| 男人天堂 天天射| 97免费在线观看| 人人弄人人摸| 人人干人人操人人..com| 一区二区三区精品黑丝白丝酒店对鸡 | 天天综合麻豆视频| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 免费精品中文字幕| 无码国产精品午夜不卡(| 四虎影库国产精品免费| 91丨精品丨国产丨丝袜| 少妇特黄一区二区三区| 国产性爱强奸乱伦大全| TS人妖另类精品视频系列 | 人妻久热在线| 亚洲九九视频在线观看| 91天天综合| 亚洲av成人精品一区| 男人a天堂手机在线版| 五月丁香婷婷综合| 欧美亚洲涩涩| 人人摸人人入| 最新国产亚洲精品精品国产亚洲综合| 黄色AV影视| 国产又大又粗又长视频在线| 欧美亚洲系列| 3D污黄视频在线观看| 中文字幕日韩综合| 青青草在线视频美女| 日熟女| av中文在线| 麻豆黄站| 四方色播| 黄片www.| 午夜综合在线| 婷婷色色五月天福利| 婷婷九月色| 中文熟女五十乱码在线| 在线亚洲欧美| 日韩成人综合网| 九草九九九| 操B视频日韩无码| 欧美亚洲激情小说| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 人妻少妇无码 | 91碰碰| 97人妻人人躁人人玩人人| 亚洲精品自拍| 国产亚洲 中文欧美久久| 91热色| 午夜黄色免费在线观看| 超碰伊人在线| 精品成人无码| 少妇三P| 日韩精品一区二区高清| 亚洲AV小说| 成人怡红院| 偷拍伦理视频| 久操免费观看| 麻豆人妻精品一区二区| 91精品91久久久中77777| 破苞ⅩXXX性无码动漫无码| 嫩草 我啊~嗯~在线| 日韩中文字幕国产| 蜜臀99999| 国产91乱伦| 亚州综合AⅤ| 免费的黄片有限公司| 久久99黄色卞西瓜| 国产三级片在线观看| 综合色图,成人综合网| 欧美综合天天| 久久超碰久| 亚洲自拍偷拍视频在线 | 人人人干干人人干| 熟女中出视频| 国产高清自拍视频| 日本精品免费一区二区三区四区| 另类TS人妖一区二区三区| 国产精品经典一卡久久久| 内射小黄片| 亚洲欧美在线综合| 蜜桃视频成a人v在线| 色婷婷一区二区三区久久午夜成人不| 久久久久久AⅤ无码免费肉站 | 日本高清_区二区三区 | 少妇九九九九| 丁香激情网| 美女天天干| 欧洲乱码视频| 亚洲高清无码在线桃色| 91精品久久久久久| 91九色精品熟女内射| 国产精品午夜AV完会免费 | 中文久久96| 国产精品国产拍高清AV| 91老熟女| 人妻无码后入| 日韩中文字幕二区| 国产又黄又爽| 久久久婷| 久久 国产精品 一区| 激情色图| 欲香欲色天天天综合和网| 99久久婷婷国产综合| 国语对白露脸XXXXXX| 欧美72网页| 1024人妻| 超碰成人公开| 老熟乱一区二区三区四区| 一本正道久久熟女| 亚洲精品aa久久伊人| 亚洲欧洲自拍| 狠狠躁天天躁日日躁97| 日本在线一二| 欧美色涩| 亚洲九九视频在线观看| 精精夜夜| 日本性交操一区二区不卡系列| 熟妇一区,二区,三区。| 亚洲中文字幕乱码无码一区二区 | 性色乱AV一区二区| 日韩黄色一区二区三区| 啊啊啊啊啊啊好多水| 97超碰中文字幕| 无码人妻丰满熟妇奶水区毛片| 国产浮力影院第1页| 伊人热综合| 亚洲区 欧美区| 人妻无码后入| 女色视频社区| 视频分类 国内精品| 欧美不卡五十路| 99热这里都是精品| 丝袜色综合| 欧美日韩性爱精品| 极品尤物女神在线观看| 日本熟女不卡视频| 欧美AB在线| 国产精品久久久久久久久久二区三区| 超碰97在线 欧美 国产| 亚洲国男人的天堂| 天天做日日做天天欢。| 日本性爱欧美性爱| 国产精品一区二区a| 秘书高跟黑色丝袜国产91在线| 日韩78m视频| 久久亚洲不卡一区二区三区| 日韩中文字幕二区| 乱论91| 久久直播国产| 日韩欧美大力操| 91丝袜在线观看| 欧美 亚洲 在线| 韩日欧亚a级| 色偷偷综合91久久噜噜| 超碰69| 人人爽人人精品乱人伦AV| 蜜臀99999| 亚洲男人的天堂一区二区| 超碰日本97美女人妻人人玩人人爱| 色五月婷婷中文字幕| 国产不卡免费在线视频| 国产亚洲中文不卡二区| 国产精品极品美女视频| 青青青国产手线观看视频2| 家庭乱伦麻豆| 欧美大的香蕉有线电视视频 | 97欧美综合网| 淫淫综合网| 亚洲,欧美,综合网| 97超碰中文字幕| 啊啊啊操死我了| 亚洲中文字幕一区二区| 九九久久国产精品怡红院| 美女天天干| 日本男人天堂| 欧美天天综合在线| 久操免费观看| 激情五月天中文字幕色| 欧美gv在线观看| 澳门黄片一香蕉视频| 宅男影院久久久,99| 性在久久久久久|