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

秒配單!SpringBoot 與 GeoHash 聯手打造外賣騎手實時精準派單系統!

開發 前端
外賣平臺的實時派單,本質是一個 高頻寫入 + 快速查詢 + 高并發 的技術難題。傳統數據庫方案往往在查詢效率和并發控制上遇到瓶頸,而 SpringBoot + GeoHash + Redis 的組合恰好能在三方面實現突破。

隨著即時配送行業的加速發展,外賣平臺的訂單與騎手規模呈現指數級增長。某頭部平臺每天處理超百萬訂單,在線騎手數量超過 20 萬。這樣龐大的規模帶來了三大核心挑戰:

  1. 位置更新高頻:騎手每 3 秒上報一次坐標,單日產生 5.76 億條位置數據,傳統數據庫難以承載高頻寫入。
  2. 派單需快速就近匹配:系統需在 200ms 內返回 3 公里范圍內候選騎手,而傳統 SQL 基于 ST_Distance 的全表計算常常超過 500ms。
  3. 高并發下避免數據競爭:高峰期同時觸發 1000+ 訂單派單,若處理不當會出現鎖沖突與數據不一致,直接影響用戶體驗。

傳統方案在 查詢效率、數據可靠性、并發處理與邊界匹配 上存在明顯短板。為破解瓶頸,本文將介紹如何借助 SpringBoot + GeoHash + Redis,搭建一個高效、可靠且可擴展的實時派單系統。

為何選擇 GeoHash?

空間降維:二維轉一維

GeoHash 使用 Base32 編碼將經緯度轉為字符串(如 39.908823,116.397470 → wx4g89)。這樣,本來需要在二維平面計算的“附近騎手”問題,可以簡化為字符串前綴匹配,查詢性能提升一個數量級。

精度靈活

GeoHash 的長度決定了定位精度:

  • 6 位(如 wx4g89):約 1 公里范圍,適合全城范圍的粗粒度篩選。
  • 7 位(如 wx4g89e):約 100 米范圍,適合最后一公里的精匹配。

這種靈活性避免了過度精確帶來的數據分散,同時兼顧效率與準確性。

Redis 提供原生地理支持

Redis 內置了 GEOADDGEORADIUS 等命令,可以直接存儲騎手坐標與執行范圍查詢。結合 Hash 結構存儲 GeoHash → 騎手ID 的映射,可以輕松支撐 每秒十萬次位置更新與查詢。

解決邊界問題

僅查詢單個 GeoHash 區域會漏掉邊界騎手。通過 目標 GeoHash + 相鄰 8 個 GeoHash 的策略,可以覆蓋訂單周邊區域,確保不會遺漏臨近騎手。

系統設計

整體架構

系統分為四層:

  • 感知層:騎手端 APP 每 3 秒上傳位置;用戶端下單上傳收貨地址。
  • 接入層:SpringBoot 接收請求,校驗參數。
  • 業務層:GeoHash 轉碼、派單計算邏輯。
  • 存儲層:Redis 保存騎手位置、GeoHash 映射、訂單狀態。

數據流程

騎手位置上報

  • APP → POST /rider/report
  • 轉換為 GeoHash,更新 Redis(GEO + Hash)。

訂單派單

  • 用戶下單 → POST /order/dispatch
  • 流程:

收貨地址 → GeoHash

獲取目標 + 相鄰 8 個 GeoHash 下的騎手

計算距離,篩選 在線 + 未超載 + 3 公里內 騎手

排序取 Top3,推送派單通知

數據模型

騎手位置模型

package com.icoderoad.dispatch.model;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


/**
 * 騎手位置模型
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RiderLocation {
    private String riderId;      // 騎手ID
    private double lng;          // 經度
    private double lat;          // 緯度
    private String geoHash;      // GeoHash
    private boolean online;      // 是否在線
    private int orderCount;      // 當前接單量
}

訂單模型

package com.icoderoad.dispatch.model;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


/**
 * 訂單模型
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Order {
    private String orderId;     // 訂單ID
    private double recvLng;     // 收貨經度
    private double recvLat;     // 收貨緯度
    private String geoHash;     // 收貨地址的GeoHash
    private String assignedRider; // 分配的騎手ID
    private String status;      // 狀態:待派單/已分配/完成
}

核心代碼實現

Service 層

騎手位置服務
package com.icoderoad.dispatch.service;


import com.icoderoad.dispatch.model.RiderLocation;
import com.icoderoad.dispatch.util.GeoHashUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.data.geo.Point;
import org.springframework.data.redis.connection.RedisGeoCommands;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;


@Service
@RequiredArgsConstructor
public class RiderLocationService {


    private final StringRedisTemplate redisTemplate;


    private static final String GEO_KEY = "delivery:riders";
    private static final String HASH_KEY = "delivery:rider:info:";


    /**
     * 騎手位置上報
     */
    public void reportLocation(RiderLocation rider) {
        // GEO 存儲坐標
        redisTemplate.opsForGeo().add(GEO_KEY,
                new RedisGeoCommands.GeoLocation<>(rider.getRiderId(),
                        new Point(rider.getLng(), rider.getLat())));


        // Hash 存儲附加信息
        redisTemplate.opsForHash().put(HASH_KEY + rider.getRiderId(),
                "geoHash", GeoHashUtils.encode(rider.getLat(), rider.getLng(), 6));
        redisTemplate.opsForHash().put(HASH_KEY + rider.getRiderId(),
                "online", String.valueOf(rider.isOnline()));
        redisTemplate.opsForHash().put(HASH_KEY + rider.getRiderId(),
                "orderCount", String.valueOf(rider.getOrderCount()));
    }


    /**
     * 根據 geoHash 獲取騎手列表(簡化)
     */
    public String[] getRidersByGeoHash(String geoHash) {
        // 實際場景可用 redis scan + hash 過濾,這里演示簡化返回
        return new String[]{"rider1", "rider2"};
    }
}
派單服務
package com.icoderoad.dispatch.service;


import com.icoderoad.dispatch.model.Order;
import com.icoderoad.dispatch.util.GeoHashUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;


import java.util.*;


@Service
@RequiredArgsConstructor
public class DispatchService {


    private final RiderLocationService riderLocationService;


    @Value("${dispatch.max-distance}")
    private double maxDistance;


    @Value("${dispatch.geohash-precision}")
    private int geoHashPrecision;


    /**
     * 創建訂單并派單
     */
    public Order createAndDispatch(Order order) {
        // 1. 計算訂單GeoHash
        String orderGeoHash = GeoHashUtils.encode(order.getRecvLat(), order.getRecvLng(), geoHashPrecision);
        order.setGeoHash(orderGeoHash);
        order.setStatus("待派單");


        // 2. 查詢目標 GeoHash + 相鄰 8 個區域
        Set<String> candidates = new HashSet<>();
        for (String gh : GeoHashUtils.adjacent(orderGeoHash)) {
            candidates.addAll(Arrays.asList(riderLocationService.getRidersByGeoHash(gh)));
        }


        // 3. 簡化:隨便取一個候選騎手
        String assignedRider = candidates.stream().findFirst().orElse(null);


        // 4. 更新訂單對象
        if (assignedRider != null) {
            order.setAssignedRider(assignedRider);
            order.setStatus("已分配");
        }
        return order;
    }
}

Controller 層

騎手位置上報接口

package com.icoderoad.dispatch.controller;


import com.icoderoad.dispatch.model.RiderLocation;
import com.icoderoad.dispatch.service.RiderLocationService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;


@RestController
@RequestMapping("/rider")
@RequiredArgsConstructor
public class RiderController {


    private final RiderLocationService riderLocationService;


    @PostMapping("/report")
    public String reportLocation(@RequestParam String riderId,
                                 @RequestParam double lng,
                                 @RequestParam double lat) {
        RiderLocation rider = new RiderLocation(riderId, lng, lat, null, true, 0);
        riderLocationService.reportLocation(rider);
        return "騎手位置上報成功";
    }
}

派單接口

package com.icoderoad.dispatch.controller;


import com.icoderoad.dispatch.model.Order;
import com.icoderoad.dispatch.service.DispatchService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;


@RestController
@RequestMapping("/order")
@RequiredArgsConstructor
public class OrderController {


    private final DispatchService dispatchService;


    @PostMapping("/dispatch")
    public Order dispatch(@RequestParam String orderId,
                          @RequestParam double lng,
                          @RequestParam double lat) {
        Order order = new Order(orderId, lng, lat, null, null, null);
        return dispatchService.createAndDispatch(order);
    }
}

環境與配置

Redis 啟動

docker run -d --name redis-geohash -p 6379:6379 \
  -v redis-data:/data \
  -e REDIS_PASSWORD=redis123 \
  redis:6.2.6 --appendonly yes

SpringBoot 配置

spring:
  redis:
    host: localhost
    port: 6379
    password: redis123
    lettuce:
      pool:
        max-active: 200
        max-idle: 50


dispatch:
  max-distance: 3000   # 派單最大距離(米)
  geohash-precision: 6 # GeoHash 精度

前端派單可視化界面

dispatch.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>派單可視化</title>
    <link  rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
    <script src="https://webapi.amap.com/maps?v=2.0&key=你的高德Key"></script>
</head>
<body class="container mt-4">
    <h3 class="mb-3">外賣派單可視化</h3>
    <div id="map" style="width: 100%; height: 500px;" class="mb-3"></div>


    <div class="card p-3">
        <h5>模擬下單</h5>
        <div class="row mb-2">
            <div class="col"><input type="text" id="orderId" class="form-control" placeholder="訂單ID"></div>
            <div class="col"><input type="text" id="lng" class="form-control" placeholder="經度"></div>
            <div class="col"><input type="text" id="lat" class="form-control" placeholder="緯度"></div>
            <div class="col"><button id="btnDispatch" class="btn btn-primary w-100">派單</button></div>
        </div>
        <div id="result" class="alert alert-info d-none"></div>
    </div>


    <script>
        var map = new AMap.Map("map", { zoom: 12, center: [116.397428, 39.90923] });


        var riders = [
            {id: "rider1", lng: 116.40, lat: 39.91},
            {id: "rider2", lng: 116.38, lat: 39.92},
            {id: "rider3", lng: 116.42, lat: 39.90}
        ];


        riders.forEach(r => {
            new AMap.Marker({
                position: [r.lng, r.lat],
                map: map,
                title: r.id,
                icon: "https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png"
            });
        });


        $("#btnDispatch").click(function () {
            var orderId = $("#orderId").val();
            var lng = $("#lng").val();
            var lat = $("#lat").val();


            $.post("/order/dispatch", {orderId: orderId, lng: lng, lat: lat}, function (res) {
                $("#result").removeClass("d-none").text(res);
                if(res.includes("騎手")) {
                    new AMap.Marker({
                        position: [lng, lat],
                        map: map,
                        title: "訂單 " + orderId,
                        icon: "https://webapi.amap.com/theme/v1.3/markers/n/mark_r.png"
                    });
                }
            });
        });
    </script>
</body>
</html>

結論

外賣平臺的實時派單,本質是一個 高頻寫入 + 快速查詢 + 高并發 的技術難題。傳統數據庫方案往往在查詢效率和并發控制上遇到瓶頸,而 SpringBoot + GeoHash + Redis 的組合恰好能在三方面實現突破:

  1. GeoHash 降維:空間查詢轉字符串匹配,效率提升十倍。
  2. Redis 高并發:原生 GEO 命令確保百萬級騎手位置實時更新。
  3. 邊界問題解決:相鄰 GeoHash 查詢避免遺漏騎手。

這種方案不僅能保障外賣派單的實時性和準確性,還具備 良好的可擴展性,可支撐未來千萬級訂單。對網約車調度、同城快遞分配等場景同樣適用。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2025-05-20 09:00:04

SpringGeoHash派單

2020-09-11 06:57:31

系統外賣騎手

2016-08-05 18:25:31

2022-03-17 17:34:21

AI算法騎手

2022-06-30 14:07:10

分庫分表系統

2014-11-13 10:30:00

2023-08-31 22:17:15

JavaMySQLB+樹

2014-10-30 09:37:30

西部數據

2025-08-15 07:36:48

彈幕系統Spring

2025-06-26 04:10:00

2025-06-19 02:11:00

2022-06-30 07:34:46

分庫分表外賣訂單系統

2025-09-26 08:46:30

2013-03-29 09:28:30

文件共享思杰NetApp

2020-12-03 09:00:02

Java外賣系統

2025-07-14 05:00:00

監控系統工具

2025-09-08 07:48:01

SpringWebSocket監控

2025-03-11 09:28:34

2014-10-27 18:13:02

ITSM

2012-09-21 14:00:30

紅帽Linux
點贊
收藏

51CTO技術棧公眾號

亚洲大全视频| 日韩黄色碟片| 337p粉嫩大胆噜噜噜噜噜91av| 97婷婷涩涩精品一区| 欧美特黄一区二区三区| 国产成人77亚洲精品www| 成人欧美一区二区三区黑人麻豆| 97伦理在线四区| 日本网站在线播放| 成人6969www免费视频| 欧美草草影院在线视频| 国产免费人做人爱午夜视频| 快射av在线播放一区| 99久久久久免费精品国产| 国产精品成人国产乱一区| 波多野结衣爱爱视频| 伊人久久大香线蕉综合网站 | 91久久精品无嫩草影院| 第一福利永久视频精品| 欧美日韩亚洲国产成人| 日本五码在线| 国产黄色精品网站| 国产精欧美一区二区三区| 久久99久久久| 久久亚洲专区| 国产一区二区三区中文| 中国极品少妇xxxx| 高清久久精品| 欧美视频日韩视频| 少妇高潮喷水在线观看| 高h视频在线观看| 中文成人av在线| 美日韩免费视频| 丰满熟妇乱又伦| 精品一区中文字幕| 国产精品久久久久77777| 日韩精品1区2区| 亚洲小说欧美另类社区| 久久在线精品视频| 少妇的滋味中文字幕bd| 欧美日韩爱爱| 国产视频在线观看一区二区| 欧产日产国产精品98| 亚洲日本va中文字幕| 欧美日韩国产经典色站一区二区三区| 欧美视频第一区| 天堂网在线最新版www中文网| 亚洲女与黑人做爰| 日韩video| 国产二区三区在线| |精品福利一区二区三区| 亚洲国产成人不卡| 成年人视频免费在线观看| av成人免费在线| 国产精品欧美久久| 亚洲国产999| 大胆亚洲人体视频| 国产高清在线一区二区| 成人毛片视频免费看| 国产精品77777| 51精品国产人成在线观看| 国产女18毛片多18精品| 狠狠色伊人亚洲综合成人| 成人久久久久爱| 国产精品乱码久久久| 国产制服丝袜一区| av资源站久久亚洲| 亚洲福利在线观看视频| 成人精品电影在线观看| 国内不卡一区二区三区| 无码国产精品一区二区免费16 | 欧美一区二区成人| 男男受被啪到高潮自述| 91精品尤物| 日韩经典第一页| 亚洲天堂久久新| 欧美日韩精品一区二区视频| 中日韩午夜理伦电影免费| 三上悠亚在线观看视频| 欧美黄色一级视频| 性欧美xxxx交| 国产偷人爽久久久久久老妇app | japanese在线观看| 亚洲精品3区| 中文字幕亚洲无线码在线一区| 一本一本久久a久久| 欧美日韩国产精品一区二区亚洲| 欧美黄色片在线观看| 日韩中文字幕在线观看视频| 久久亚洲不卡| 成人在线观看视频网站| 亚洲精选一区二区三区| 久久久一区二区| 91手机视频在线| sis001亚洲原创区| 欧美亚洲自拍偷拍| 一级黄色大片免费看| 日韩最新在线| 久久综合久久美利坚合众国| 日韩免费在线视频观看| 人人精品人人爱| 成人一区二区三区四区| 国产中文字幕在线观看| 亚洲欧美日韩成人高清在线一区| 欧美日韩在线视频一区二区三区| 亚洲在线资源| 日韩成人免费视频| 欧美成人777| 西西人体一区二区| 99re在线国产| 日本三级视频在线播放| 精品免费在线视频| 制服下的诱惑暮生| 国产亚洲一区| 久久露脸国产精品| 亚洲综合免费视频| 久久久久久久久久久久久久久99| 黄黄视频在线观看| 日韩欧美2区| 日韩精品免费视频| 久久免费视频播放| 国产精品一级片| 天天人人精品| 成人在线视频播放| 精品99999| 放荡的美妇在线播放| 日本三级亚洲精品| 精品国产一区二区三区免费 | 一区二区三区**美女毛片| 国产裸体免费无遮挡| 成午夜精品一区二区三区软件| 中日韩美女免费视频网站在线观看| 男人的天堂一区二区| 国产一区二区三区美女| 亚洲美女网站18| 日韩欧美一区二区三区免费观看 | 久久久久久a亚洲欧洲aⅴ| 在线观看wwwxxxx| 欧美无人高清视频在线观看| 国产美女喷水视频| 国产偷自视频区视频一区二区| 99电影网电视剧在线观看| www视频在线看| 678五月天丁香亚洲综合网| 亚洲色图第四色| 久久综合婷婷| 亚洲 国产 日韩 综合一区| 午夜无码国产理论在线| 国产亚洲视频在线| 亚洲中文无码av在线| 国产网红主播福利一区二区| 亚洲色精品三区二区一区| 免费看av成人| 国产www精品| 国模吧精品人体gogo| 在线观看一区二区精品视频| 国产sm调教视频| 日韩高清不卡一区二区三区| 视频一区二区精品| 亚洲成人va| 日韩一区二区久久久| 91九色蝌蚪91por成人| 中文字幕亚洲精品在线观看| www.成年人| 国内激情久久| 精品久久久久久乱码天堂| 欧美xxxhd| 亚洲免费视频在线观看| 天天干天天色综合| 中文字幕va一区二区三区| 欧美成年人视频在线观看| 91精品国产自产在线观看永久∴| 亚洲最大的成人网| av影院在线免费观看| 日韩av网站大全| 青青国产在线视频| 一区精品在线播放| 2018国产精品| 男人的天堂亚洲| 亚洲一区三区视频在线观看| 欧洲精品99毛片免费高清观看| 欧美黄色片免费观看| 日本人妖在线| 欧美蜜桃一区二区三区| 久久久久97国产| 久久久不卡网国产精品二区| 中文字幕66页| 在线观看视频免费一区二区三区| 久草精品电影| 日本午夜精品久久久久| 久久久久国产精品www| 污污的视频网站在线观看| 欧美性感一区二区三区| 劲爆欧美第一页| 国产视频一区二区三区在线观看| www.日本久久| 亚洲视频1区| 一区二区三区欧美成人| heyzo欧美激情| 国产精品无av码在线观看| 黄页网站在线| 色噜噜狠狠色综合网图区| 人妻无码中文字幕免费视频蜜桃| 欧美日韩一区三区| 日本黄色片视频| 成人欧美一区二区三区1314| 精品无码一区二区三区 | 91青青草免费观看| 婷婷综合六月| 97激碰免费视频| 欧美精品videos另类| 亚洲美女性视频| 亚洲产国偷v产偷v自拍涩爱| 欧美在线观看视频在线| 日韩欧美视频在线免费观看| 亚洲视频网在线直播| 久久久久久久久久久国产精品| 国产精品自拍在线| 91女神在线观看| 性感少妇一区| 可以在线看的av网站| 91精品亚洲| 亚洲国产一区二区三区在线| 天堂成人娱乐在线视频免费播放网站| 亚洲精品日韩av| 老司机精品视频网| 国产精品aaa| 日本黄色免费在线| 色综合导航网站| 综合久久2019| 久久综合88中文色鬼| 麻豆传媒在线观看| 波霸ol色综合久久| 亚洲搞黄视频| 中文字幕日韩精品有码视频| 黄网站在线观看| 亚洲精选一区二区| 亚洲av成人精品毛片| 亚洲国产精品人久久电影| 老熟妇高潮一区二区高清视频| 91麻豆精品国产自产在线观看一区| 在线免费看av的网站| 欧美亚洲一区二区三区四区| 成人av网站在线播放| 91久久精品国产91性色tv| 成人精品在线看| 午夜久久福利影院| 日韩 欧美 综合| 欧美三级免费观看| 国产毛片aaa| 色天天综合色天天久久| www.色国产| 欧洲精品一区二区| 一区二区美女视频| 日韩一区二区在线观看视频播放| 国产乱人乱偷精品视频| 欧美一区二区视频在线观看| www.好吊色| 亚洲国产精品电影| 九色视频在线观看免费播放| 亚洲人成伊人成综合网久久久| 欧美理论在线观看| 一本久久综合亚洲鲁鲁| 婷婷在线视频| 精品自拍视频在线观看| 国模雨婷捆绑高清在线| 91超碰caoporn97人人| 亚洲一区资源| 国产精品专区第二| 在线视频成人| 成人精品一二区| 日韩高清成人在线| 日本在线成人一区二区| 91精品二区| av在线播放亚洲| 免费成人av在线| 天堂av.com| 99re这里只有精品首页| 国产亚洲精品精品精品| 亚洲品质自拍视频| 日本少妇吞精囗交| 欧美日韩免费视频| 国产成人精品一区二三区四区五区| 精品免费国产一区二区三区四区| 五月天婷婷社区| 综合网中文字幕| 国产91足控脚交在线观看| 欧美在线观看日本一区| 亚洲影视资源| 蜜桃av噜噜一区二区三区| 日韩情爱电影在线观看| 国产96在线 | 亚洲| 久久精品免费看| 三级视频网站在线观看| 国产精品久久二区二区| 成年人免费看毛片| 这里只有精品电影| 日韩美女一级视频| 欧美成aaa人片在线观看蜜臀| 看黄在线观看| 91久久国产精品91久久性色| 综合亚洲自拍| 污污污污污污www网站免费| 日韩电影在线一区二区三区| 欧洲熟妇的性久久久久久| 中文字幕av资源一区| 天天综合网入口| 日韩欧美一区二区久久婷婷| 国产黄色免费在线观看| 久久久亚洲影院| 国产精品一区二区三区av| 欧美日韩免费高清| 国产综合激情| 中文国产在线观看| 中文字幕电影一区| 中文字幕在线看人| 精品日韩一区二区| 韩国av网站在线| 国产欧美日韩中文字幕在线| 精品一区毛片| 少妇高潮毛片色欲ava片| 国产一区二区剧情av在线| 日本一二三不卡视频| 欧美性xxxx在线播放| 亚洲欧美黄色片| 欧美xxxx综合视频| 美女网站视频一区| 日本一区二区三区视频在线观看| 99国产精品私拍| 久久久久久久穴| 亚洲精品午夜久久久| 国产又色又爽又黄又免费| 中文欧美在线视频| 国产欧美在线观看免费| 亚洲精品国产精品国自产| 久久精品日产第一区二区| 无码h肉动漫在线观看| 欧美日韩美女视频| 亚州av在线播放| 97人人做人人爱| 日本妇女一区| 日韩免费一级视频| 99视频精品在线| 超碰超碰超碰超碰| 亚洲毛片在线免费观看| 999av小视频在线| 精品欧美国产一区二区三区不卡| 在线观看视频免费一区二区三区| zjzjzjzjzj亚洲女人| 午夜免费久久看| 九色在线观看| 国产精品视频一区二区高潮| 色琪琪久久se色| 杨幂一区二区国产精品| 亚洲一二三专区| 午夜福利视频一区二区| 亲子乱一区二区三区电影| 国产成人1区| 五月天av在线播放| 亚洲综合在线视频| 蜜桃久久一区二区三区| 97不卡在线视频| 国产在线日韩精品| 中文字幕 日韩 欧美| 亚洲三级理论片| 天堂中文网在线| 国产精品成人在线| 国产精品国产三级国产在线观看| 免费不卡av网站| 五月天激情小说综合| 美女欧美视频在线观看免费 | 欧美日本精品在线| 秋霞综合在线视频| 日本激情综合网| 亚洲最色的网站| 美女欧美视频在线观看免费| 国产免费成人av| 午夜久久黄色| 中文字幕一区二区三区人妻| 欧美日韩在线观看一区二区| av大全在线| 欧美久久电影| 国产盗摄一区二区三区| 日日噜噜噜噜人人爽亚洲精品| www.日韩免费| 欧美黑人做爰爽爽爽| 天天视频天天爽| 亚洲成a人在线观看| av中文天堂在线| 国产精品日韩高清| 日本中文字幕一区二区视频| 久久亚洲av午夜福利精品一区| 亚洲人成77777在线观看网| 日本超碰一区二区| 日本男人操女人| 亚洲永久精品大片| 尤物网在线观看| 精品国产日本| 国产成人亚洲精品青草天美| 无码人妻av免费一区二区三区|