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

亚洲午夜私人影院| 国产一区二区三区四| 一区二区欧美久久| 国产一级片自拍| 欧美xxxxhdvideosex| 91在线你懂得| 成人a视频在线观看| 九九九国产视频| 欧洲美女日日| 日韩激情美女| 亚洲一区激情| 久久精品亚洲国产| 老鸭窝一区二区| 成人在线分类| 色乱码一区二区三区88| 久久福利一区二区| 黄色在线网站| 成人av网在线| 91久久精品久久国产性色也91| 日本天堂网在线观看| 色男人天堂综合再现| 精品视频在线播放| 性色av浪潮av| 久久青草免费| 色悠久久久久综合欧美99| 免费看黄色a级片| 91社区在线观看播放| av不卡免费电影| 114国产精品久久免费观看| 亚洲图片欧美日韩| 宅男噜噜噜66国产日韩在线观看| 日韩视频永久免费观看| 亚洲区自拍偷拍| 亚洲福利网站| 亚洲国产欧美一区二区三区久久| 日韩a一级欧美一级| 91精品国产经典在线观看| 美女91在线看| 国产一二三精品| 国产精品美女久久| 五月天激情四射| 亚洲欧洲一区| 欧美精品videossex88| 午夜免费激情视频| 99国产**精品****| 色噜噜狠狠狠综合曰曰曰88av| 性欧美精品中出| 亚洲a级精品| 国产视频久久久久| 久久人人爽人人爽人人片| 国产精品久久久久av蜜臀| 日韩免费一区二区| 日本成人在线免费观看| 欧美日本三级| 日韩欧美亚洲另类制服综合在线 | 中文字幕av网址| 国产精品白丝av嫩草影院| 欧美成人一区二区三区片免费 | 久热精品视频在线| 高h视频免费观看| 欧美不卡一区| 欧美精品videosex极品1| 国产五月天婷婷| 亚洲免费精品| 人九九综合九九宗合| 国产污视频网站| 免费成人在线观看视频| 国产主播欧美精品| www.国产三级| 99久久精品免费看国产免费软件| 国内精品视频免费| 你懂的视频在线| 国产人妖乱国产精品人妖| 亚洲高清乱码| 永久免费网站在线| 性欧美疯狂xxxxbbbb| 欧美精品一区免费| 成人国产一区| 日韩三级高清在线| 欧美一区二区免费在线观看| 亚洲制服欧美另类| 国产在线播放一区| 中日韩美女免费视频网站在线观看 | 精品国产乱码久久久久久图片| 佐佐木明希电影| 日韩手机在线| 日韩在线欧美在线| 久草视频在线资源| 久久久国产亚洲精品| 成人黄色在线免费| 亚洲欧美丝袜中文综合| 国产欧美一区二区精品仙草咪| 最近中文字幕免费mv| 黄页网站大全在线免费观看| 欧美性感美女h网站在线观看免费| 不卡av免费在线| 亚洲啊v在线免费视频| 亚洲精品理论电影| 日本一级片免费| 99精品国产一区二区青青牛奶| 国产精品久久国产精品99gif| 国产欧美日韩成人| 久久综合色播五月| 国产又黄又爽免费视频| 三级在线看中文字幕完整版| 在线成人免费视频| 公侵犯人妻一区二区三区| 免费成人av电影| 欧美日本成人| 久久成人国产精品| 亚洲无码精品一区二区三区| 国产高清不卡一区二区| 午夜一区二区三区| 免费v片在线观看| 欧美一区二区三区在| 在线免费观看视频| 国产亚洲精品bv在线观看| 亚洲综合大片69999| shkd中文字幕久久在线观看| 亚洲成av人片一区二区三区| 毛片毛片毛片毛| 成久久久网站| 欧美在线一区二区三区四| www久久久com| 中文字幕亚洲区| 亚洲精品乱码久久久久久自慰| 成人动态视频| 蜜臀久久99精品久久久无需会员 | 亚洲精品福利资源站| 亚洲熟女www一区二区三区| 免费欧美在线视频| 日本精品国语自产拍在线观看| a级片免费在线观看| 91精品视频网| 国产精品国产三级国产传播| 秋霞成人午夜伦在线观看| 欧美xxxx黑人又粗又长精品| 大香伊人久久| 欧美变态tickling挠脚心| 国产精品三区在线观看| 另类调教123区| 亚洲不卡1区| 狂野欧美性猛交xxxx| 在线日韩日本国产亚洲| 波多野结衣一本一道| 久久久精品黄色| 免费大片在线观看| gogogo高清在线观看一区二区| 欧洲一区二区视频| 男人的天堂在线| 欧美性色19p| 国产精品成人一区二区三区电影毛片| 一区二区三区精品视频在线观看| 国产欧美综合精品一区二区| 黄色软件视频在线观看| 亚洲福利影片在线| 毛片基地在线观看| 久久久久久久久99精品| 日韩一级片播放| 日韩欧美网站| 亚洲va欧美va国产综合剧情 | 亚洲制服丝袜一区| 老熟女高潮一区二区三区| 伊人久久大香线蕉综合热线 | 亚洲成人激情小说| 午夜精彩国产免费不卡不顿大片| 国产99视频精品免费视频36| 爱啪视频在线观看视频免费| 亚洲美女精品成人在线视频| 中文字幕乱码人妻无码久久| 中文字幕亚洲综合久久菠萝蜜| 91免费视频污| 在线亚洲伦理| 亚洲在线色站| 2023国产精华国产精品| 57pao成人国产永久免费| 国产永久免费高清在线观看| 欧美久久久久中文字幕| 国产在线观看免费av| 91亚洲精品乱码久久久久久蜜桃 | 国产精品久久久久久久妇| 久久精品视频免费观看| 超碰在线资源站| 亚洲高清不卡| 少妇特黄a一区二区三区 | 精品奇米国产一区二区三区| 在线天堂中文字幕| 国产精品乱人伦中文| 性一交一黄一片| 久久激情综合| 欧美 国产 精品| 久久99国产精品视频| 91免费高清视频| 中文字幕高清在线播放| 日韩在线资源网| 偷拍自拍在线视频| 欧美二区在线观看| 在线视频一区二区三区四区| 亚洲日本一区二区| 深爱五月激情网| 国产suv一区二区三区88区| 国产激情在线观看视频| 国产精品多人| 亚洲综合欧美日韩| 亚洲制服一区| 国产一区国产精品| 不卡一区视频| 国产成人精品日本亚洲专区61| 在线看一级片| 最好看的2019年中文视频| 色婷婷视频在线| 91精品国产免费| 尤物视频免费观看| 欧美日韩国产中文字幕| 国产suv一区二区三区| 国产视频一区二区三区在线观看| av漫画在线观看| 国产真实乱子伦精品视频| 99久久激情视频| 亚洲在线免费| 日韩a级在线观看| 亚洲精品电影| 亚洲免费视频一区| 国产精品欧美在线观看| 精品久久久久亚洲| 91成人在线精品视频| 1区1区3区4区产品乱码芒果精品| 色成人免费网站| 人妖精品videosex性欧美| segui88久久综合9999| 久久av红桃一区二区小说| freemovies性欧美| 亚洲天堂av综合网| 欧美一区二区少妇| 日韩高清不卡av| 无码h黄肉3d动漫在线观看| 精品三级av在线| www.xxxx国产| 日韩精品一区二区三区在线| 国产日产亚洲系列最新| 欧美精品日韩精品| 国产精品高潮呻吟久久久| 欧美日韩国产综合一区二区| 国产精品露脸视频| 欧美视频一区二区三区在线观看| 欧美人一级淫片a免费播放| 色综合av在线| 国产成人麻豆免费观看| 在线一区二区观看| 自拍偷拍18p| 欧美日韩综合在线免费观看| 一级特黄免费视频| 欧美日韩一区二区三区视频| 91好色先生tv| 日韩一区二区在线观看视频播放| 99热这里只有精| 精品99久久久久久| 人妻精品无码一区二区| 国产视频丨精品|在线观看| 蝌蚪视频在线播放| 一区二区在线视频| 秋霞影院午夜丰满少妇在线视频| 久久精品国产亚洲7777| 男人天堂亚洲天堂| 欧亚精品在线观看| abab456成人免费网址| 成人高h视频在线| 麻豆国产一区| 精品久久久久久中文字幕动漫| 久久不见久久见免费视频7| 日韩久久在线| 一本精品一区二区三区| 男人插女人视频在线观看| 国产美女诱惑一区二区| 三级视频中文字幕| 国产一区二区美女诱惑| 大尺度做爰床戏呻吟舒畅| 久久精品一区二区三区四区| 永久免费看mv网站入口| 亚洲图片有声小说| 老司机免费视频一区二区| 久久久久久人妻一区二区三区| 99伊人成综合| 色婷婷成人在线| 国产盗摄女厕一区二区三区| 国产xxxxxxxxx| 国产精品人人做人人爽人人添| 91插插插插插插| 欧美日韩亚洲精品内裤| 国产又粗又长视频| 亚洲国产一区自拍| av影片在线看| 久久久久久国产精品| 国产一区二区精品调教| 成人免费视频网站| 在线观看av日韩| 亚洲毛片在线| 岛国av免费在线| 2020国产成人综合网| 国产精品视频看看| 精品成人久久av| 国产又粗又猛又黄又爽无遮挡| 精品国产免费一区二区三区四区 | 99在线免费视频观看| 日韩av不卡在线观看| 最新日本中文字幕| 中文字幕精品一区二区精品绿巨人 | 午夜美女久久久久爽久久| 欧美成a人片免费观看久久五月天| 国产高清一区二区三区| 999久久久91| 能在线观看的av网站| 不卡一区中文字幕| 国产日韩欧美在线观看视频| 欧洲亚洲精品在线| 色婷婷av一区二区三| 色与欲影视天天看综合网| a成人v在线| 欧美性bbwbbwbbwhd| 日韩视频在线一区二区三区| 亚洲色图欧美自拍| 国产精品久久久久久久久久久免费看| 国产精品自拍99| 亚洲第一网中文字幕| 日本高清中文字幕在线| 国产精品jvid在线观看蜜臀| 欧美成a人免费观看久久| 香港三级日本三级a视频| 精品在线一区二区| 1024手机在线观看你懂的| 一道本成人在线| 香蕉久久一区二区三区| 久久久免费在线观看| 一区二区三区免费在线看| 国产女人18毛片| 国内外成人在线| 91香蕉视频网| 欧美日韩国产精品自在自线| 午夜视频在线免费观看| 国产精品亚洲第一区| 日韩精品二区| 激情黄色小视频| 国产精品美日韩| 91成人国产综合久久精品| 日韩视频免费在线观看| 国产精品一区二区三区四区在线观看| 亚洲国产日韩欧美| 看电视剧不卡顿的网站| 日韩在线不卡av| 91精品欧美福利在线观看| xvideos国产在线视频| 亚洲xxxx在线| 精品二区视频| 亚洲精品乱码久久久久久不卡| 天天影视色香欲综合网老头| 天堂a中文在线| 日韩美女在线看| 日韩大片在线播放| 一本一道久久a久久综合蜜桃| 亚洲私人黄色宅男| 性中国古装videossex| 午夜精品久久久久久99热软件 | 先锋影音欧美| 国产麻豆午夜三级精品| 国产一级av毛片| 日韩毛片在线观看| 高清av一区| 337p亚洲精品色噜噜狠狠p| 福利电影一区二区| 在线观看日本视频| 日韩亚洲精品视频| 91欧美极品| 国产天堂在线播放| 亚洲免费在线观看| 成 人 黄 色 片 在线播放| 午夜欧美大片免费观看| 国内精品视频在线观看| 999久久久精品视频| 亚洲成a人v欧美综合天堂下载 | 一区二区视频在线| 亚洲av激情无码专区在线播放| 国产精品99免视看9| 亚洲欧美色图| 日本高清www| 91精品国产综合久久香蕉的特点| av成人福利| 亚洲精品一区二区毛豆| zzijzzij亚洲日本少妇熟睡| 无码人妻久久一区二区三区| 欧美成人精品xxx| 婷婷国产精品| 男生和女生一起差差差视频| 狠狠躁夜夜躁久久躁别揉| 免费av网站在线看| 精品亚洲第一| 国产美女精品一区二区三区| 中文字幕视频网站| 精品中文字幕乱| 日韩欧美午夜| aa片在线观看视频在线播放|