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

SpringBoot+Redis 實戰:從零搭建千萬級數據實時熱銷商品排行榜

數據庫 其他數據庫
在電商平臺、內容社區等業務場景中,實時熱銷商品排行榜是提升用戶體驗、引導消費決策的核心功能之一。當面對千萬級商品數據和高并發訪問時,傳統的數據庫排序方案會面臨性能瓶頸,而Redis憑借其高性能的內存數據結構,成為實現實時排行榜的最優選擇。

引言

圖片圖片

在電商平臺、內容社區等業務場景中,實時熱銷商品排行榜是提升用戶體驗、引導消費決策的核心功能之一。當面對千萬級商品數據和高并發訪問時,傳統的數據庫排序方案會面臨性能瓶頸,而Redis憑借其高性能的內存數據結構,成為實現實時排行榜的最優選擇。

設計背景

傳統基于關系型數據庫(如 MySQL)的排行榜實現,通常依賴ORDER BY語句對商品銷量、熱度等字段進行排序。但在千萬級數據場景下,存在以下問題:

  • 性能瓶頸:數據庫排序需掃描全表或大范圍索引,單次查詢耗時可達數百毫秒甚至秒級,無法滿足實時性要求;
  • 并發壓力:高并發訪問時,數據庫連接池易耗盡,導致系統響應超時;
  • 數據一致性:銷量、熱度等數據實時更新,頻繁寫入會加劇數據庫鎖競爭,影響讀寫性能。

針對上述痛點,系統需滿足以下核心需求:

  • 實時性:排行榜數據更新延遲不超過1秒,用戶訪問時可即時獲取最新排名;
  • 高并發:支持每秒1000+查詢請求(QPS),且響應時間控制在100ms以內;
  • 可擴展性:支持千萬級商品數據存儲,且能隨業務增長橫向擴展;
  • 多維度排序:支持按銷量、銷售額、熱度(點擊+收藏)等多維度生成排行榜;
  • 數據持久化:排行榜數據需持久化,避免Redis重啟后數據丟失。

系統架構設計

系統采用MySQL存基礎數據 + Redis存排序數據的雙層架構,核心流程如下:

  • 數據寫入:商品銷量 / 熱度更新時,先更新MySQL中的數據,再通過Redisson原子操作更新Redis ZSet中的分數(Score);
  • 數據查詢:用戶訪問排行榜時,直接從Redis ZSet中查詢Top N數據,再關聯MySQL中的商品基礎信息返回給前端;
  • 數據同步:通過定時任務(如Spring定時任務)或binlog同步工具(如Canal),確保MySQLRedis數據最終一致性。

Redis ZSet 結構設計

Redis ZSet由成員(Member)和分數(Score)組成,天然適合實現排行榜場景。本系統中ZSet的設計如下:

  • Key命名規則:hot:ranking:{維度}:{時間范圍},例如:

hot:ranking:sales:daily(今日銷量排行榜)

hot:ranking:heat:weekly(本周熱度排行榜)

  • Member:商品IDLong類型),確保唯一標識商品;
  • Score:排序依據,例如:
  • 銷量維度:Score = 商品今日銷量(整數);
  • 熱度維度:Score = 點擊量×0.3 + 收藏量×0.5 + 加購量×0.2(加權計算)。

實現

核心配置

spring:
  # MySQL 配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ecommerce?useSSL=false&serverTimeznotallow=UTC
    username: root
    password: 123456

# Redis 配置
  redis:
    host: localhost
    port: 6379
    password: 123456
    database: 0
    timeout: 5000ms
    lettuce:
      pool:
        max-active: 20  # 最大連接數
        max-idle: 10    # 最大空閑連接數
        min-idle: 5     # 最小空閑連接數

# Redisson 配置(支持持久化和分布式鎖)
redisson:
  address: redis://localhost:6379
  password: 123456
  database: 0
  connection-pool-size: 16
  connection-minimum-idle-size: 8
  retry-attempts: 3  # 重試次數
  retry-interval: 1000  # 重試間隔(毫秒)

# MyBatis-Plus 配置
mybatis-plus:
  mapper-locations: classpath:mapper/**/*.xml
type-aliases-package: com.example.ecommerce.entity
  configuration:
    map-underscore-to-camel-case: true# 下劃線轉駝峰

數據庫表設計

CREATE TABLE `product` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '商品ID',
  `name` varchar(255) NOT NULL COMMENT '商品名稱',
  `image_url` varchar(512) DEFAULT NULL COMMENT '商品圖片鏈接',
  `price` decimal(10,2) NOT NULL COMMENT '商品價格',
  `sales` int NOT NULL DEFAULT '0' COMMENT '累計銷量',
  `heat` int NOT NULL DEFAULT '0' COMMENT '商品熱度(點擊+收藏+加購)',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
  PRIMARY KEY (`id`),
  KEY `idx_sales` (`sales`),  # 銷量索引
  KEY `idx_heat` (`heat`)     # 熱度索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';

排行榜常量定義

public class RankingConstant {
    // 排行榜維度:銷量、熱度
    public static final String DIMENSION_SALES = "sales";
    public static final String DIMENSION_HEAT = "heat";
    
    // 時間范圍:今日、本周、本月
    public static final String TIME_RANGE_DAILY = "daily";
    public static final String TIME_RANGE_WEEKLY = "weekly";
    public static final String TIME_RANGE_MONTHLY = "monthly";
    
    // Key 生成模板:hot:ranking:{維度}:{時間范圍}
    public static String getRankingKey(String dimension, String timeRange) {
        return String.format("hot:ranking:%s:%s", dimension, timeRange);
    }
}

排行榜服務實現(核心)

@Service
public class HotRankingService {


    @Autowired
    private RedissonClient redissonClient;

    @Autowired
    private ProductMapper productMapper;

    /**
     * 1. 更新商品在排行榜中的分數(支持增量更新)
     *
     * @param productId      商品ID
     * @param dimension      排序維度(sales/heat)
     * @param timeRange      時間范圍(daily/weekly/monthly)
     * @param scoreIncrement 分數增量(正數為增加,負數為減少)
     */
    public void updateProductScore(Long productId, String dimension, String timeRange, double scoreIncrement) {
        // 1. 獲取 ZSet 實例
        RScoredSortedSet<Long> zSet = redissonClient.getScoredSortedSet(
                RankingConstant.getRankingKey(dimension, timeRange)
        );

        // 2. 原子增量更新分數(避免并發更新導致的分數不一致)
        zSet.addScore(productId, scoreIncrement);

        // 3. (可選)設置過期時間(如日榜過期時間為次日0點,周榜為下周1零點)
        String key = RankingConstant.getRankingKey(dimension, timeRange);
        RKeys rKeys = redissonClient.getKeys();
        if (!rKeys.isExists(key)) {
            long expireTime = getExpireTime(timeRange);
            redissonClient.getBucket(key).expire(expireTime, TimeUnit.MILLISECONDS);
        }
    }

    /**
     * 2. 查詢排行榜 Top N 數據(含商品基礎信息)
     *
     * @param dimension 排序維度
     * @param timeRange 時間范圍
     * @param topSize   取前 N 條
     * @return 排行榜列表(含排名、商品信息、分數)
     */
    public List<RankingVO> getRankingTopN(String dimension, String timeRange, int topSize) {
        // 1. 獲取 ZSet 實例,按分數降序排列(分數越高排名越前)
        RScoredSortedSet<Long> zSet = redissonClient.getScoredSortedSet(
                RankingConstant.getRankingKey(dimension, timeRange)
        );

        // 2. 查詢 Top N 的商品ID和分數
        Collection<ScoredEntry<Long>> topEntries = zSet.entryRangeReversed(0, topSize - 1);
        if (CollectionUtil.isEmpty(topEntries)) {
            return Collections.emptyList();
        }

        // 3. 批量查詢商品基礎信息(減少 MySQL 連接次數)
        List<Long> productIds = topEntries.stream()
                .map(ScoredEntry::getValue)
                .collect(Collectors.toList());
        List<Product> products = productMapper.selectBatchByIds(productIds);
        Map<Long, Product> productMap = products.stream()
                .collect(Collectors.toMap(Product::getId, Function.identity()));

        // 4. 組裝返回結果(含排名、商品信息、分數)
        List<RankingVO> rankingVOList = new ArrayList<>();
        int rank = 1;
        for (ScoredEntry<Long> entry : topEntries) {
            Long productId = entry.getValue();
            Product product = productMap.get(productId);
            if (product == null) {
                continue; // 商品已下架,跳過
            }

            RankingVO vo = new RankingVO();
            vo.setRank(rank++);
            vo.setProductId(productId);
            vo.setProductName(product.getName());
            vo.setProductImage(product.getImageUrl());
            vo.setProductPrice(product.getPrice());
            vo.setScore(Math.round(entry.getScore())); // 分數取整(如銷量、熱度為整數)
            rankingVOList.add(vo);
        }

        return rankingVOList;
    }

    /**
     * 3. 查詢單個商品在排行榜中的排名
     *
     * @param productId 商品ID
     * @param dimension 排序維度
     * @param timeRange 時間范圍
     * @return 商品排名(null 表示未入榜)
     */
    public Integer getProductRank(Long productId, String dimension, String timeRange) {
        RScoredSortedSet<Long> zSet = redissonClient.getScoredSortedSet(
                RankingConstant.getRankingKey(dimension, timeRange)
        );

        // ZSet 排名從 0 開始,需 +1 轉為自然排名
        return zSet.revRank(productId) == null ? null : zSet.revRank(productId) + 1;
    }

    /**
     * 輔助方法:計算排行榜過期時間
     */
    private long getExpireTime(String timeRange) {
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime expireDateTime;

        switch (timeRange) {
            case RankingConstant.TIME_RANGE_DAILY:
                // 今日榜:過期時間為次日0點
                expireDateTime = now.plusDays(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
                break;
            case RankingConstant.TIME_RANGE_WEEKLY:
                // 本周榜:過期時間為下周1零點(ISO周:周一為一周第一天)
                expireDateTime = now.plusWeeks(1).with(TemporalAdjusters.next(DayOfWeek.MONDAY))
                        .withHour(0).withMinute(0).withSecond(0).withNano(0);
                break;
            case RankingConstant.TIME_RANGE_MONTHLY:
                // 本月榜:過期時間為下月1零點
                expireDateTime = now.plusMonths(1).withDayOfMonth(1)
                        .withHour(0).withMinute(0).withSecond(0).withNano(0);
                break;
            default:
                throw new IllegalArgumentException("不支持的時間范圍:" + timeRange);
        }
        // 計算當前時間到過期時間的毫秒數
        return Duration.between(now, expireDateTime).toMillis();
    }
}

訂單服務實現

@Service
public class OrderService {

    @Autowired
    private ProductMapper productMapper;

    @Autowired
    private HotRankingService rankingService;

    /**
     * 用戶下單:更新商品銷量,并同步更新銷量排行榜
     * @param productId 商品ID
     * @param quantity 購買數量
     */
    @Transactional // 保證MySQL更新和Redis操作的原子性(最終一致性)
    public void createOrder(Long productId, Integer quantity) {
        // 1. 更新MySQL中的商品銷量(增量更新)
        Product product = new Product();
        product.setId(productId);
        product.setSales(quantity); // MyBatis-Plus會自動轉為 SET sales = sales + #{quantity}
        int updateCount = productMapper.update(product, 
                new LambdaQueryWrapper<Product>().eq(Product::getId, productId));
        if (updateCount == 0) {
            throw new RuntimeException("商品不存在或已下架:" + productId);
        }

        // 2. 同步更新Redis銷量排行榜(日榜、周榜、月榜)
        rankingService.updateProductScore(
                productId, 
                RankingConstant.DIMENSION_SALES, 
                RankingConstant.TIME_RANGE_DAILY, 
                quantity
        );
        rankingService.updateProductScore(
                productId, 
                RankingConstant.DIMENSION_SALES, 
                RankingConstant.TIME_RANGE_WEEKLY, 
                quantity
        );
        rankingService.updateProductScore(
                productId, 
                RankingConstant.DIMENSION_SALES, 
                RankingConstant.TIME_RANGE_MONTHLY, 
                quantity
        );
    }
}

性能優化

Redis 層面優化

內存優化:
  • 啟用Redis內存淘汰策略(如 allkeys-lru),當內存達到閾值時自動淘汰不常用的排行榜數據;
  • ZSet進行分片存儲:若單維度排行榜數據超過1000萬,可按商品ID哈希分片(如hot:ranking:sales:daily:00~hot:ranking:sales:daily:15),降低單ZSet大小,提升操作性能。
持久化優化:
  • 采用AOF+RDB混合持久化:RDB用于全量備份(如每天凌晨2點執行),AOF用于增量日志(每秒刷盤一次),兼顧數據安全性和性能;
  • 關閉AOF重寫期間的自動觸發,手動在業務低峰期執行(如凌晨3點),避免重寫占用過多CPU。
集群部署:
  • 采用Redis Cluster 集群(至少33從),將不同維度的排行榜分散到不同主節點(通過Key哈希分片),實現負載均衡;
  • 為每個主節點配置從節點,避免主節點故障導致排行榜不可用。

數據庫層面優化

減少查詢壓力:
  • 對商品基礎信息查詢添加 本地緩存(如Caffeine),緩存熱點商品數據(如Top 1000商品),過期時間設為5分鐘,減少MySQL訪問次數;
  • 批量查詢代替單條查詢:排行榜關聯商品信息時,通過selectBatchByIds批量獲取,避免循環查詢(N+1問題)。
寫入性能優化:
  • 若商品銷量更新頻率極高(如每秒thousands次),采用消息隊列(Kafka/RabbitMQ)異步批量更新:將銷量更新請求寫入隊列,消費者批量(如每100條或每1秒)更新MySQLRedis,降低瞬時寫入壓力;
  • product表的sales字段添加 樂觀鎖(如增加version字段),避免并發更新導致的數據覆蓋。

應用層面優化

接口緩存:
  • 對排行榜查詢接口添加Redis緩存(如緩存hot:ranking:cache:sales:daily:top10),緩存時間設為10秒(根據實時性需求調整),避免高頻查詢穿透到Redis ZSet;
  • 采用緩存預熱:在業務高峰期前(如電商大促0點前),通過定時任務提前查詢Top N數據并寫入緩存,避免高峰期緩存擊穿。
并發控制:
  • 對商品排名查詢接口添加 接口限流(如使用Sentinel),限制單IP每秒查詢次數(如10次),避免惡意請求壓垮系統;
  • 使用Redisson分布式鎖,解決多實例部署時的并發更新問題(如多個服務實例同時更新同一商品的銷量分數)。
責任編輯:武曉燕 來源: 一安未來
相關推薦

2025-03-10 12:10:00

RedisJava排行榜

2024-05-15 17:21:18

RedisSpring數據

2025-01-02 13:07:24

2023-07-17 08:32:40

2013-08-23 09:41:19

2018-01-17 18:06:56

數據科學機器學習排名

2012-04-28 14:29:36

App Store沖榜策略排行榜規則

2014-07-30 12:56:56

2025-05-07 08:21:01

2022-06-17 12:10:07

RPA機器人流程自動化

2024-03-26 00:00:06

RedisZSet排行榜

2024-04-03 08:10:58

Kafka音樂排行榜系統

2020-03-07 22:01:58

編程語言JavaPython

2019-10-21 10:59:52

編程語言JavaC

2024-08-29 09:32:36

2022-08-09 08:29:50

TIOBE編程語言排行榜程序員

2022-06-08 13:50:41

AI專業排行

2012-05-28 09:34:36

編程語言WEB編程

2019-08-02 09:26:24

深度學習框架排行榜

2018-02-08 09:19:34

linux
點贊
收藏

51CTO技術棧公眾號

国产精品免费观看高清| 亚洲成色777777在线观看影院| 色一情一区二区三区四区| 一级全黄裸体免费视频| 欧美日韩国产在线一区| 亚洲欧美在线一区| 国产精品igao网网址不卡| www在线观看黄色| 国产精品久久三| 国产高清一区视频| 91资源在线视频| 亚洲欧美日韩国产一区| 麻豆乱码国产一区二区三区| 中文字字幕码一二三区| 国产aa精品| 欧洲亚洲精品在线| 国产成人无码精品久久久性色| 自拍视频在线免费观看| 99精品热视频| 波多野结衣精品久久| 中文无码av一区二区三区| 日韩视频在线一区二区三区 | 亚洲天堂视频一区| 天堂va欧美ⅴa亚洲va一国产| 一本大道久久a久久综合婷婷| 国产女主播av| 乱人伦中文视频在线| 久久亚洲精华国产精华液 | 在线观看亚洲国产| 亚洲一区二区三区| 中文字幕日韩在线视频| 丝袜美腿中文字幕| 一区二区精彩视频| 91精品中文字幕一区二区三区| 久久精品一区二| 丁香花在线观看完整版电影| 自拍偷在线精品自拍偷无码专区 | 精品女厕一区二区三区| 亚洲欧美日韩不卡| se在线电影| 久久久久久一二三区| 精品国产免费一区二区三区 | 成人免费高清视频| 亚洲最大的网站| 天天爽夜夜爽夜夜爽精品| 国产精品多人| 久久久久九九九九| 久久久久97国产| 国产综合视频| 国语自产偷拍精品视频偷 | 国产精品永久免费在线| 国产熟妇一区二区三区四区| 玖玖在线精品| 国产精品久久77777| 在线永久看片免费的视频| 久久综合图片| 国产精品久在线观看| 夫妻免费无码v看片| 国产精品第九页| 激情欧美一区| 韩国欧美亚洲国产| 色婷婷在线观看视频| 国产精品乱看| 日韩av成人在线| 波多野结衣电车痴汉| 久久国内精品自在自线400部| 国产日韩欧美综合| 国产精品色综合| 国产成人自拍网| 精品一卡二卡三卡四卡日本乱码 | 91视频精品在这里| 久久香蕉综合色| 青青草手机在线| 久久久久久久综合日本| 亚洲欧美日韩综合一区| 免费黄网站在线| 一区av在线播放| 日本精品一区在线观看| 欧美精品高清| 日韩欧美综合一区| 欧美夫妇交换xxx| 自拍偷拍一区| 综合久久五月天| 青青草手机视频在线观看| 夜夜嗨一区二区三区| 国产精品美女www爽爽爽视频| 伊人免费在线观看| 成人免费毛片app| 精品视频久久久久久久| 国产 高清 精品 在线 a| 免费av一级片| 欧美国产一区视频在线观看| 自拍偷拍一区二区三区| mm视频在线视频| 欧美私人免费视频| www男人天堂| 欧美日韩精品一区二区视频| 欧美xxxx18国产| 国产精品久免费的黄网站| 国内精品免费**视频| 欧美激情一区二区三区在线视频| 久久综合网导航| 日韩欧美国产骚| 国产裸体视频网站| 成人区精品一区二区婷婷| 欧美极品美女电影一区| 中文字幕久久网| av在线免费不卡| 丰满女人性猛交| 色网在线免费观看| 日韩欧美国产小视频| 我想看黄色大片| 国产精品久久久免费| 95av在线视频| 欧美激情午夜| 日本二三区不卡| 日韩 中文字幕| 欧美日本国产| 91九色国产社区在线观看| 精品影院一区| 欧美性猛交xxx| 欧美一级片黄色| 欧美日韩国产在线一区| 91最新国产视频| 五月香视频在线观看| 色婷婷久久久亚洲一区二区三区| 午夜影院福利社| 一本一道久久a久久精品蜜桃| 国产精品伦子伦免费视频| 色吊丝在线永久观看最新版本| 一区二区三区 在线观看视频| 亚洲国产日韩欧美在线观看| 欧美偷拍自拍| 国产精品福利片| 国产精品一二三区视频| 欧美体内谢she精2性欧美| 国产激情第一页| 亚洲经典在线| 韩国成人一区| 午夜伦理福利在线| 日韩理论片久久| 精品人妻一区二区三区免费看| 97国产精品videossex| 久久久久久久中文| 欧美大胆视频| 浅井舞香一区二区| 九色在线播放| 欧美三片在线视频观看| 中文字幕精品亚洲| 麻豆精品视频在线| 在线观看日韩羞羞视频| 日韩在线你懂得| 久热精品视频在线免费观看| 国产探花精品一区二区| 伊人色综合久久天天人手人婷| 国产高清av片| 国产精品porn| 国严精品久久久久久亚洲影视 | 蜜桃视频在线免费| 在线观看一区不卡| 中文乱码字幕高清一区二区| 精品一区二区三区影院在线午夜 | 亚洲一区欧美激情| 欧美日韩亚洲在线| 韩国精品视频在线观看| 久久久精品在线观看| 亚洲高清视频网站| 香蕉加勒比综合久久| 欧洲女同同性吃奶| 九色综合国产一区二区三区| 精品国产三级a∨在线| 国产精品玖玖玖在线资源| 欧美在线视频网| 色影院视频在线| 日韩精品在线一区二区| 国产又爽又黄的视频| 亚洲国产精品黑人久久久| 波多野结衣在线免费观看| 亚洲三级国产| 亚洲高清视频一区| 亚洲精品不卡在线观看| 国产91色在线|| 18videosex性欧美麻豆| 亚洲国产欧美精品| 在线观看黄色国产| 午夜影院在线观看欧美| 亚洲综合第一区| 成人国产精品免费网站| 国产视频一区二区视频| 欧美二区视频| 日韩精品伦理第一区| 视频欧美一区| 国产精品成人一区二区| 日本电影在线观看| 亚洲性视频网址| 黄色av小说在线观看| 精品视频在线看| 国产91av视频| 自拍偷拍欧美激情| 国产精品扒开腿做爽爽| 国产在线播精品第三| 女人和拘做爰正片视频| 欧美福利视频| 亚洲精品一区二| 丝袜连裤袜欧美激情日韩| 成人在线免费观看视视频| 中文字幕在线高清| 欧美激情精品久久久久久久变态| 91大神xh98hx在线播放| 日韩高清av一区二区三区| 国产视频一区二区三| 91久久精品国产91性色tv| 精品一区在线视频| 亚洲女女做受ⅹxx高潮| 精品无码人妻一区二区免费蜜桃| 成人sese在线| 亚洲三级在线视频| 九九国产精品视频| 国产精品人人妻人人爽人人牛| 今天的高清视频免费播放成人| 日本成人性视频| 精品一区二区三区在线| 蜜桃传媒一区二区| 欧美巨大xxxx| 国产精品一区二| 草草视频在线一区二区| 成人天堂噜噜噜| 日本成人一区二区| 国产噜噜噜噜噜久久久久久久久| 中文字幕成在线观看| 国语自产在线不卡| 国产中文在线播放| 久久久亚洲影院你懂的| av影片在线| 孩xxxx性bbbb欧美| www.51av欧美视频| 午夜精品在线观看| 国模私拍一区二区国模曼安| 97视频在线观看视频免费视频 | 国产在线观看黄| 亚洲精品永久免费| 久久天堂电影| 亚洲色图25p| 粉嫩av在线播放| 一区二区欧美亚洲| 素人av在线| 久久成人人人人精品欧| 性欧美高清come| 欧美激情精品久久久久久免费印度| 欧洲性视频在线播放| 欧美精品电影免费在线观看| 岛国av在线播放| 欧美综合一区第一页| 美女福利一区二区| 国产精品美乳一区二区免费| 欧美网站免费| 亚洲综合视频1区| 国产成人aa在线观看网站站| 国产在线一区二区三区欧美| 天堂俺去俺来也www久久婷婷| 欧美日韩国产三区| 99精品电影| www.日本在线视频| 国产美女一区| 手机在线成人免费视频| 国产酒店精品激情| 在线黄色免费网站| 中文字幕av在线一区二区三区| 国产不卡在线观看视频| 亚洲综合视频在线| 亚洲天堂男人av| 91.成人天堂一区| 黑人乱码一区二区三区av| 精品亚洲国产成av人片传媒 | 久久人人爽人人爽人人片av高请 | 风间由美久久久| 日韩精品a在线观看91| 视频一区二区三| 午夜性色一区二区三区免费视频 | 亚洲人成在线网站| 国产精品欧美日韩一区二区| 欧美日本三级| 久久人人九九| 欧美 日韩 国产一区二区在线视频| 久久这里只有精品18| 久久久久看片| 日本黄色www| 久久久综合网站| 少妇影院在线观看| 91国产福利在线| 亚洲免费国产视频| 一区二区三区久久精品| 蜜桃传媒在线观看免费进入 | 欧洲精品99毛片免费高清观看| 精品一区二区三区国产| 一级欧洲+日本+国产| 久久久久免费精品| 粉嫩在线一区二区三区视频| 在线观看免费小视频| 国产在视频线精品视频www666| 国产盗摄xxxx视频xxx69| av日韩久久| 日本在线播放一区| 影音先锋一区| 一级做a免费视频| 久久伊99综合婷婷久久伊| 免费一级黄色大片| 欧美狂野另类xxxxoooo| 天堂在线中文字幕| 欧美日韩高清区| 91麻豆精品| 亚洲第一在线综合在线| 亚洲视频1区| 中国男女全黄大片| 国产精品灌醉下药二区| 欧美a视频在线观看| 亚洲成色999久久网站| av网站在线免费| 国产日韩在线精品av| 国产一卡不卡| 东京热加勒比无码少妇| 成人一区二区三区视频在线观看| 日本少妇aaa| 在线看日韩精品电影| 午夜性色福利视频| 午夜免费久久久久| 99国产精品免费网站| 超碰10000| 国产在线一区二区| 午夜激情福利电影| 欧美一a一片一级一片| 九色视频在线播放| 日本精品免费观看| 色先锋久久影院av| 国产妇女馒头高清泬20p多| 国产不卡免费视频| 青娱乐免费在线视频| 日韩免费电影一区| 亚洲综合影视| av免费精品一区二区三区| 中文字幕一区二区av| 不卡中文字幕在线观看| 国产精品高清亚洲| 国产三级小视频| 免费97视频在线精品国自产拍| 欧美三级一区| 久操手机在线视频| 成人高清视频在线观看| 国产精品suv一区二区| 亚洲高清av在线| 黄在线观看免费网站ktv| 久久超碰亚洲| 免费一区视频| 成年人免费观看视频网站| 欧洲视频一区二区| 欧美a免费在线| 亚洲最大av在线| 亚洲欧洲一区| 免费在线观看你懂的| 欧美视频一区二区三区在线观看| av播放在线| 日韩av在线最新| 国产精品系列视频| 欧美成人剧情片在线观看| 99热这里只有精品首页 | 一区二区伦理片| 欧美日韩一区二区三区不卡| 麻豆视频在线观看免费| 91九色在线观看| 亚洲深夜影院| 9.1片黄在线观看| 欧美一区二区三区男人的天堂| 国产三级伦理在线| 99精品视频一区| 国产精品16p| 亚洲性生活视频在线观看| 亚洲一区有码| www.射射射| 亚洲国产精品av| 亚洲国产成人一区二区| 国产91成人在在线播放| 久久美女精品| japanese在线观看| 欧美午夜一区二区三区 | 精品av一区二区| 国产aⅴ爽av久久久久| 亚洲国产日韩精品| 天天综合视频在线观看| 国产欧美日韩一区| 七七婷婷婷婷精品国产| 欧美日韩在线观看成人| 日韩精品在线观看网站| 国产激情综合| 丰满少妇被猛烈进入高清播放| 中文字幕在线不卡| 亚洲日本香蕉视频| 亚洲精品日韩激情在线电影| 久久精品系列| 久久精品一级片| 综合网中文字幕|