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

分布式環境下的接口冪等性保障:Spring Boot 實踐與方案對比

開發 前端
冪等性(Idempotence)是一個數學與計算機學概念,指的是無論對同一操作執行多少次,其結果都是相同的。對于接口而言,即使用戶重復提交相同的請求,接口最終產生的效果也與單次提交一致。

前言

隨著業務的快速發展,分布式系統已成為企業級應用的主流架構。然而,分布式環境下的網絡延遲、服務重試、負載均衡等因素,都可能導致接口被重復調用。如果接口不具備冪等性,可能會引發數據不一致、重復創建資源、資金重復扣減等嚴重問題。

冪等性定義

冪等性(Idempotence)是一個數學與計算機學概念,指的是無論對同一操作執行多少次,其結果都是相同的。對于接口而言,即使用戶重復提交相同的請求,接口最終產生的效果也與單次提交一致。

為什么需要冪等性

在分布式系統中,以下場景可能導致請求重復:

  • 網絡抖動導致客戶端重試
  • 前端表單重復提交
  • 服務間調用超時重試
  • 負載均衡環境下的請求重定向
  • 分布式事務中的補償機制

常見的冪等性解決方案

圖片圖片

基于數據庫的方案

唯一主鍵

利用數據庫主鍵的唯一性約束,確保重復請求無法插入重復數據。

適用場景:訂單創建、用戶注冊等需要唯一標識的場景。

樂觀鎖

通過版本號機制實現,更新數據時檢查版本號,只有版本號匹配才允許更新。

UPDATE orders SET status = 1, version = version + 1 WHERE id = 123 AND version = 0
悲觀鎖

利用數據庫的行鎖機制,在事務中鎖定記錄,防止并發修改。

SELECT * FROM orders WHERE id = 123 FOR UPDATE

基于令牌 (Token) 的方案

  • 客戶端請求獲取令牌
  • 服務端生成全局唯一令牌并返回
  • 客戶端攜帶令牌發起業務請求
  • 服務端驗證令牌有效性,執行業務邏輯,標記令牌已使用

適用場景:表單提交、支付請求等需要防止重復提交的場景。

基于分布式鎖的方案

利用Redis、ZooKeeper等組件實現分布式鎖,確保同一時間只有一個請求能執行關鍵業務邏輯。

適用場景:庫存扣減、秒殺等并發控制嚴格的場景。

基于狀態機的方案

通過定義清晰的狀態流轉規則,確保重復請求無法改變最終狀態。

例如,訂單狀態流轉:創建 → 支付中 → 已支付 → 已完成,不允許從已支付直接回到支付中狀態。

適用場景:有明確狀態流轉的業務,如訂單、工單等。

基于冪等設計的 API

遵循RESTful設計原則,合理使用HTTP方法:

  • GET:天生冪等,只查詢數據
  • PUT:應設計為冪等,用于全量更新
  • DELETE:應設計為冪等,刪除資源
  • POST:通常不冪等,用于創建資源

冪等性實現

基于數據庫唯一約束的實現

創建訂單實體類,使用業務唯一標識作為聯合唯一約束:

@Entity
@Table(name = "orders", 
       uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id", "order_no"})})
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(name = "user_id")
    private Long userId;
    
    @Column(name = "order_no")
    private String orderNo;
    
    private BigDecimal amount;
    
    private String status;
    
    @Version
    private Integer version;
}

Service層處理訂單創建,捕獲唯一約束異常:

@Service
@Transactional
public class OrderService {
    
    @Autowired
    private OrderRepository orderRepository;
    
    public Order createOrder(Order order) {
        try {
            return orderRepository.save(order);
        } catch (DataIntegrityViolationException e) {
            // 捕獲唯一約束異常,查詢已存在的訂單
            return orderRepository.findByUserIdAndOrderNo(order.getUserId(), order.getOrderNo())
                    .orElseThrow(() -> new RuntimeException("訂單創建失敗"));
        }
    }
}

基于令牌的實現

創建令牌工具類:

@Component
public class TokenUtil {
    
    @Autowired
    private StringRedisTemplate redisTemplate;
    
    // 生成令牌
    public String generateToken(String keyPrefix, long expireSeconds) {
        String token = UUID.randomUUID().toString();
        String key = keyPrefix + ":" + token;
        redisTemplate.opsForValue().set(key, "0", expireSeconds, TimeUnit.SECONDS);
        return token;
    }
    
    // 驗證令牌
    public boolean validateToken(String keyPrefix, String token) {
        String key = keyPrefix + ":" + token;
        // 使用Redis的setIfAbsent實現原子操作
        return redisTemplate.opsForValue().setIfAbsent(key, "1", 5, TimeUnit.MINUTES);
    }
}

創建令牌控制器:

@RestController
@RequestMapping("/api/token")
public class TokenController {
    
    @Autowired
    private TokenUtil tokenUtil;
    
    @GetMapping("/generate")
    public String generateToken() {
        // 為支付場景生成令牌,有效期30分鐘
        return tokenUtil.generateToken("payment", 1800);
    }
}

支付接口實現:

@RestController
@RequestMapping("/api/payment")
public class PaymentController {
    
    @Autowired
    private PaymentService paymentService;
    
    @Autowired
    private TokenUtil tokenUtil;
    
    @PostMapping
    public ResponseEntity<?> processPayment(@RequestHeader("X-Idempotency-Token") String token,
                                           @RequestBody PaymentRequest request) {
        // 驗證令牌
        boolean isValid = tokenUtil.validateToken("payment", token);
        if (!isValid) {
            return ResponseEntity.badRequest().body("重復請求");
        }
        
        // 處理支付邏輯
        PaymentResult result = paymentService.processPayment(request);
        return ResponseEntity.ok(result);
    }
}

基于 Redis 分布式鎖的實現

創建分布式鎖工具類:

@Component
public class RedisLockUtil {
    
    @Autowired
    private StringRedisTemplate redisTemplate;
    
    private static final String LOCK_PREFIX = "lock:";
    private static final long DEFAULT_EXPIRE = 30000; // 默認鎖過期時間30秒
    
    // 獲取鎖
    public boolean tryLock(String key, long expireMillis) {
        String lockKey = LOCK_PREFIX + key;
        String value = UUID.randomUUID().toString();
        
        Boolean success = redisTemplate.opsForValue().setIfAbsent(lockKey, value, expireMillis, TimeUnit.MILLISECONDS);
        return Boolean.TRUE.equals(success);
    }
    
    public boolean tryLock(String key) {
        return tryLock(key, DEFAULT_EXPIRE);
    }
    
    // 釋放鎖
    public void unlock(String key) {
        String lockKey = LOCK_PREFIX + key;
        redisTemplate.delete(lockKey);
    }
}

在庫存服務中使用分布式鎖:

@Service
public class InventoryService {
    
    @Autowired
    private InventoryRepository inventoryRepository;
    
    @Autowired
    private RedisLockUtil redisLockUtil;
    
    @Transactional
    public boolean deductStock(Long productId, int quantity) {
        String lockKey = "product:" + productId;
        
        try {
            // 獲取鎖
            boolean locked = redisLockUtil.tryLock(lockKey, 5000);
            if (!locked) {
                throw new RuntimeException("獲取鎖失敗,請重試");
            }
            
            // 查詢庫存
            Inventory inventory = inventoryRepository.findByProductId(productId)
                    .orElseThrow(() -> new RuntimeException("商品不存在"));
            
            // 檢查庫存是否充足
            if (inventory.getStock() < quantity) {
                throw new RuntimeException("庫存不足");
            }
            
            // 扣減庫存
            inventory.setStock(inventory.getStock() - quantity);
            inventoryRepository.save(inventory);
            returntrue;
        } finally {
            // 釋放鎖
            redisLockUtil.unlock(lockKey);
        }
    }
}

基于 AOP 的冪等性注解實現

創建冪等性注解:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Idempotent {
    // 冪等鍵前綴
    String prefix() default "";
    
    // 過期時間(秒)
    int expire() default 300;
    
    // 冪等鍵的表達式,支持SpEL
    String key() default "";
}

實現AOP切面:

@Aspect
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class IdempotentAspect {
    
    @Autowired
    private StringRedisTemplate redisTemplate;
    
    @Pointcut("@annotation(idempotent)")
    public void pointcut(Idempotent idempotent) {}
    
    @Around("pointcut(idempotent)")
    public Object around(ProceedingJoinPoint joinPoint, Idempotent idempotent) throws Throwable {
        // 解析SpEL表達式獲取冪等鍵
        String key = generateKey(joinPoint, idempotent);
        
        // 嘗試設置緩存
        Boolean success = redisTemplate.opsForValue().setIfAbsent(key, "1", 
                idempotent.expire(), TimeUnit.SECONDS);
        
        if (Boolean.TRUE.equals(success)) {
            // 第一次請求,執行目標方法
            return joinPoint.proceed();
        } else {
            // 重復請求,返回默認結果或拋出異常
            throw new RuntimeException("不允許重復請求");
        }
    }
    
    // 生成冪等鍵
    private String generateKey(ProceedingJoinPoint joinPoint, Idempotent idempotent) {
        String prefix = idempotent.prefix();
        String keyExpression = idempotent.key();
        
        if (StringUtils.isEmpty(keyExpression)) {
            // 如果沒有指定key,使用方法簽名作為默認key
            return prefix + ":" + joinPoint.getSignature().toLongString();
        }
        
        // 解析SpEL表達式
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        EvaluationContext context = new StandardEvaluationContext();
        Object[] args = joinPoint.getArgs();
        String[] parameterNames = methodSignature.getParameterNames();
        
        for (int i = 0; i < args.length; i++) {
            context.setVariable(parameterNames[i], args[i]);
        }
        
        SpelExpressionParser parser = new SpelExpressionParser();
        Expression expression = parser.parseExpression(keyExpression);
        String key = expression.getValue(context, String.class);
        
        return prefix + ":" + key;
    }
}

使用冪等性注解:

@RestController
@RequestMapping("/api/order")
public class OrderApiController {
    
    @Autowired
    private OrderService orderService;
    
    @PostMapping
    @Idempotent(prefix = "order", key = "#request.orderNo", expire = 300)
    public ResponseEntity<Order> createOrder(@RequestBody OrderRequest request) {
        Order order = new Order();
        order.setUserId(request.getUserId());
        order.setOrderNo(request.getOrderNo());
        order.setAmount(request.getAmount());
        order.setStatus("CREATED");
        
        Order savedOrder = orderService.createOrder(order);
        return ResponseEntity.ok(savedOrder);
    }
}

各方案對比與適用場景

方案

優點

缺點

適用場景

唯一主鍵

實現簡單,依賴數據庫自身特性

僅適用于插入場景,需要提前生成唯一標識

訂單創建、用戶注冊

樂觀鎖

性能好,并發高

存在重試成本,需要版本字段

庫存更新、狀態變更

悲觀鎖

數據一致性高

并發性能差,可能導致死鎖

數據一致性要求高,低并發場景

令牌機制

適用范圍廣,不侵入業務

需要額外的令牌生成和驗證步驟

表單提交、支付請求

分布式鎖

靈活性高,可控制鎖粒度

實現復雜,存在鎖超時、死鎖風險

秒殺、庫存扣減

狀態機

業務語義清晰

僅適用于有明確狀態流轉的業務

訂單流程、工單系統

RESTful 設計

符合 HTTP 規范,無額外開銷

適用場景有限

查詢、全量更新、刪除操作


責任編輯:武曉燕 來源: 一安未來
相關推薦

2021-01-13 11:23:59

分布式冪等性支付

2023-10-26 07:32:42

2024-08-29 09:01:39

2023-03-07 08:19:16

接口冪等性SpringBoot

2024-07-03 11:59:40

2021-12-01 10:13:48

場景分布式并發

2024-04-08 11:04:03

2025-07-10 02:00:00

2025-02-14 14:22:40

2017-09-22 12:08:01

數據庫分布式系統互聯網

2020-11-12 07:43:06

Redis冪等性接口

2025-10-29 01:21:00

2022-09-07 08:18:26

分布式灰度方案分支號

2025-06-04 01:00:00

2021-07-02 06:54:43

分布式環境ID

2023-11-01 10:11:00

Java分布式

2024-06-24 01:00:00

2024-11-01 09:28:02

2022-05-23 11:35:16

jiekou冪等性

2025-09-01 08:28:41

點贊
收藏

51CTO技術棧公眾號

亚洲欧美日本国产专区一区| 欧美电影在线观看网站| www.成人网.com| 国产成人久久精品| 青青青手机在线视频| 9999在线精品视频| 午夜久久电影网| 天堂av一区二区| 亚洲最大成人在线视频| 91久久电影| 日韩成人xxxx| 中文字幕日韩综合| 日本不卡1234视频| 亚洲天堂a在线| 蜜桃视频成人| www.av黄色| 青娱乐精品视频| 欧美国产亚洲精品久久久8v| 在线不卡av电影| 一区二区网站| 欧美三级中文字| 国产片侵犯亲女视频播放| 免费观看成年在线视频网站| 国产在线不卡一卡二卡三卡四卡| 欧美在线精品免播放器视频| 国产女人18水真多毛片18精品| 夜夜春成人影院| 日韩亚洲欧美中文三级| 欧美特级aaa| 超碰一区二区| 精品久久香蕉国产线看观看亚洲| 最近中文字幕免费mv| 蜜桃视频在线观看网站| 成人动漫av在线| 69堂成人精品视频免费| 亚洲成人久久影院| 中文字幕在线中文| 麻豆系列在线观看| 欧美国产欧美亚州国产日韩mv天天看完整 | 9191精品国产综合久久久久久| 91视频最新入口| sm在线观看| 亚洲一级不卡视频| 99视频精品全部免费看| 国产在线观看a| 中文字幕一区二区三区色视频| 欧美激情第六页| 色综合888| 91污在线观看| 精品中文字幕人| 四虎永久在线精品免费网址| 大美女一区二区三区| 91青青草免费在线看| 国产又粗又猛又爽又黄的| 美女视频黄久久| 国产精品久久久久久久久久99| 蜜臀精品一区二区三区| 亚洲欧美清纯在线制服| 日韩av电影国产| 亚洲熟妇无码乱子av电影| 欧美一区=区| 日本电影亚洲天堂| 欧美日韩在线视频播放| 奇米一区二区三区| 91九色国产社区在线观看| 国产区精品在线| 成人一区二区三区中文字幕| 国产精品视频入口| 天堂影院在线| 国产免费观看久久| 亚洲成人动漫在线| 久久国产精品黑丝| 欧美日韩免费网站| 国产aaaaa毛片| av日韩一区| 日韩精品资源二区在线| 国产精品麻豆入口| 免费不卡中文字幕在线| 自拍偷拍亚洲区| 欧美成人免费观看视频| 亚洲女同中文字幕| 久久久综合免费视频| 欧美三级一区二区三区| 日韩va亚洲va欧美va久久| 91免费国产视频| 好男人在线视频www| 国产三级精品视频| 国产又粗又长又爽视频| 亚洲电影观看| 欧美精品久久久久久久多人混战| 稀缺小u女呦精品呦| 激情婷婷综合| 色中色综合影院手机版在线观看 | 国产精品久久一区二区三区不卡| 国产日本欧美一区二区| 六月婷婷激情网| 韩日毛片在线观看| 欧美日韩精品一区二区天天拍小说 | 自拍在线观看| 91精品视频网| 蜜桃精品成人影片| 中文无码久久精品| 欧美一区二区三区精品电影| 国产精品久久影视| 久久色成人在线| 好吊色视频988gao在线观看| 中文字幕在线官网| 欧美一区二区免费| 中文字幕免费视频| 欧美精品福利| 国产精品视频yy9099| 国产成人精品免费看视频| 国产三级精品三级在线专区| 国产精品69久久久| 日韩免费在线电影| 亚洲天堂av在线播放| 激情五月婷婷在线| 久久国产精品第一页| 精品乱码一区二区三区| 影音先锋在线播放| 欧美日韩国产综合草草| 性久久久久久久久久| 欧美午夜不卡| 91天堂在线观看| 91官网在线| 91国偷自产一区二区开放时间 | 亚洲自拍偷拍麻豆| 国产91色在线观看| 一区二区美女| 69视频在线免费观看| 国产高清第一页| 成人欧美一区二区三区小说| 亚洲少妇久久久| 亚洲区小说区图片区qvod| 午夜精品在线视频| 黄色aaa大片| 亚洲一区二区欧美| xxxx视频在线观看| 欧美一区免费| 91免费的视频在线播放| 国产网友自拍视频导航网站在线观看| 在线亚洲欧美专区二区| 一本加勒比北条麻妃| 国产日韩免费| 久久久com| 伊伊综合在线| 亚洲人av在线影院| 无码人妻精品一区二区蜜桃色欲| 91蜜桃网址入口| 国产精品视频一区二区三区四区五区| 久久夜色精品国产噜噜av小说| 欧美精品成人91久久久久久久| 国产成人精品亚洲精品色欲| 樱花草国产18久久久久| 韩国一区二区三区四区| 亚洲一级黄色| 久久99精品久久久久久水蜜桃| 国产不卡人人| 亚洲精品永久免费精品| 国产熟妇一区二区三区四区| 国产农村妇女毛片精品久久麻豆| 亚洲免费看av| 综合国产精品| 国产在线一区二区三区四区| 涩涩涩在线视频| 亚洲丝袜一区在线| 国产女人爽到高潮a毛片| 一区二区久久久| 噜噜噜在线视频| 久久中文欧美| 欧美性受黑人性爽| 国产精品x8x8一区二区| 欧洲成人在线观看| 在线观看的av| 日韩欧美一二三区| 毛片基地在线观看| 成人免费一区二区三区视频| av在线天堂网| 日韩精品久久理论片| 黄色高清视频网站| 国产福利一区二区精品秒拍| 国产91精品网站| av香蕉成人| 亚洲裸体xxxx| 国产精品九九九九| 香蕉乱码成人久久天堂爱免费| 中文字幕av网址| 国产一区二区剧情av在线| av日韩一区二区三区| 成人高清电影网站| 97在线电影| 日韩中文影院| 欧美激情亚洲激情| www.成人.com| 亚洲国产精品yw在线观看| 最好看的日本字幕mv视频大全 | 国产性猛交╳xxx乱大交| 国产精品三级电影| 欧美xxxxx精品| 激情亚洲综合在线| 久久久免费视频网站| 亚洲激情中文| 日韩午夜视频在线观看| 成功精品影院| 91久久嫩草影院一区二区| 女海盗2成人h版中文字幕| 欧美成人精品xxx| 国产资源在线播放| 亚洲大胆人体视频| 国产精品视频在线观看免费| 欧美视频中文在线看| 麻豆亚洲av熟女国产一区二| 中文一区二区在线观看| 色婷婷免费视频| 狠狠色狠狠色综合| 国产视频手机在线播放| 欧美一级专区| 91专区在线观看| 欧美 日韩 国产 一区| 日本成人黄色免费看| 久久精品66| 高清不卡日本v二区在线| 欧美成人福利| 国产精品日韩精品| 成人片免费看| 日韩av第一页| 成人一区福利| 国产91精品黑色丝袜高跟鞋| 超清av在线| 欧美乱大交xxxxx| 理论片午午伦夜理片在线播放| 亚洲人成电影网站色…| 四虎永久在线精品免费网址| 亚洲精品在线免费观看视频| 精品久久在线观看| 91精品黄色片免费大全| 国产乱码一区二区| 欧美精品tushy高清| 一级特黄aaa大片| 欧美日韩在线观看一区二区| 亚洲精品91天天久久人人| 日韩欧美国产中文字幕| 99超碰在线观看| 狠狠躁18三区二区一区| 日本韩国欧美中文字幕| 色噜噜狠狠色综合中国| 成人免费毛片视频| 在线中文字幕不卡| 中文字幕一二三四| 欧美三级一区二区| 伊人网视频在线| 欧美二区在线观看| 国产成人免费看一级大黄| 日韩一区二区三区在线观看| 精品国产乱码一区二区三| 日韩欧美亚洲另类制服综合在线| 午夜精品久久久久久久第一页按摩 | 韩国日本不卡在线| а√天堂8资源中文在线| 91精品国产免费久久久久久 | 国产深夜精品福利| 久久wwww| 国产日韩二区| 久久综合影院| 一本久久a久久精品vr综合| 国产精品久久久久久久免费观看| 亚洲第一页在线视频| 欧美另类专区| 欧美日韩国产精品激情在线播放| 日本怡春院一区二区| 日本中文字幕二区| 国产精品一区二区果冻传媒| 亚洲欧美高清在线| 久久精品人人做人人爽人人| 丁香六月激情综合| 一区二区三区四区高清精品免费观看 | 亚洲成av人影院| 天堂网视频在线| 7799精品视频| 五月婷婷六月丁香综合| 国产亚洲欧美日韩一区二区| 国产在线观看a视频| 69久久夜色精品国产7777| 成人国产网站| 国产精品久久久久免费| 国产日韩欧美一区二区三区| 国产一二三四五| 国产日韩亚洲欧美精品| 成人日韩在线视频| 99久久国产综合精品女不卡| 成人性生交大片免费看无遮挡aⅴ| 亚洲天堂成人网| 久草视频一区二区| 日韩一区二区精品葵司在线| 青草久久伊人| 欧美国产日韩中文字幕在线| 国产精品videossex撒尿| 国产激情一区二区三区在线观看| 欧美色网址大全| 成年人看的毛片| 久久激情五月婷婷| a级大片在线观看| 亚洲最新在线观看| 亚洲一卡二卡在线观看| 亚洲精品理论电影| 18视频在线观看| 国产精品尤物福利片在线观看| 久久精品国产亚洲5555| 影音先锋在线亚洲| 天堂蜜桃91精品| 日本一卡二卡在线| 亚洲精品中文在线| 中文字幕在线观看高清| 精品中文字幕久久久久久| 最新黄网在线观看| 成人黄色av网站| 成人情趣视频| 久久久久久久久久久免费视频| 国产成人综合网站| 免费黄网站在线| 在线午夜精品自拍| 国内激情视频在线观看| 亚洲永久免费观看| 日韩久久电影| 日本中文字幕片| 成人av免费在线播放| 黄色片在线观看网站| 欧美亚洲动漫精品| 裸体xxxx视频在线| 69影院欧美专区视频| 精品三级av在线导航| 日本精品福利视频| 国产一区二区三区四区在线观看| www.99热| 在线看国产一区二区| 免费人成在线观看网站| 日本精品中文字幕| 日韩成人av在线资源| av免费观看国产| 国产精品99久久久久久有的能看| 天堂av网手机版| 欧美日本一区二区在线观看| av黄色在线观看| 国产精品视频99| 99精品在线| 亚洲免费黄色录像| 亚洲婷婷国产精品电影人久久| 91国内精品视频| 久久久999成人| 中文成人在线| 欧美大片免费播放| 国产91精品一区二区麻豆网站| 亚洲国产美女视频| 欧美成人三级在线| 99thz桃花论族在线播放| 国产精品一区二区在线观看| 亚洲美女一区| 国产偷人妻精品一区| 一本大道av一区二区在线播放| 精品影院一区| 国产欧美一区二区三区在线看| 欧美3p在线观看| 一级网站在线观看| 亚洲国产视频一区| 凸凹人妻人人澡人人添| 欧美最猛性xxxx| 色999日韩| 绯色av蜜臀vs少妇| 精品国产电影一区| 国产在线资源| 亚洲影院高清在线| 在线看片一区| 少妇精品无码一区二区免费视频 | 一本色道久久综合亚洲| 日韩视频亚洲视频| 国产精品白丝一区二区三区| 男人操女人逼免费视频| 国产女主播视频一区二区| 97caocao| 91高清视频免费观看| 成人在线亚洲| 男人添女人荫蒂国产| 色综合久久久久| 国产鲁鲁视频在线观看特色| 精品蜜桃传媒| 麻豆国产精品777777在线| 久久久精品视频在线| 亚洲色图五月天| 欧美2区3区4区| 国产aaa一级片| 亚洲欧美日韩国产综合| 日韩av成人| 亚洲一区二区三区四区在线播放 | 极品粉嫩美女露脸啪啪| 亚洲国产欧美日韩另类综合| 都市激情在线视频| 不卡视频一区| 免费成人小视频| 日韩欧美一级视频| 久久夜色精品国产亚洲aⅴ|