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

亚洲最大的成人av| 久久 天天综合| 国产视频亚洲视频| 天堂视频免费看| 亚洲第一图区| 91免费观看在线| 国产精选久久久久久| 日日噜噜夜夜狠狠久久波多野| 97一区二区国产好的精华液| 欧美性色xo影院| 综合色婷婷一区二区亚洲欧美国产| www.xxx国产| 日本伊人午夜精品| 国内精品400部情侣激情| 亚洲国产日韩一区无码精品久久久| 成人精品视频在线观看| 欧美性色19p| 日韩av中文字幕第一页| 午夜视频在线看| 97se亚洲国产综合自在线观| 91精品久久久久久久久久久| 日韩熟女精品一区二区三区| 国产精品久久久久无码av| 日韩极品精品视频免费观看| 少妇丰满尤物大尺度写真| 成人短视频app| 亚洲亚洲人成综合网络| 亚洲自拍三区| www免费网站在线观看| bt7086福利一区国产| 成人黄色片网站| 男操女视频网站| 国产精品日本| 久久免费视频在线| 四虎永久免费在线| 色综合色综合| 亚洲色图欧美制服丝袜另类第一页| 中文字幕在线观看视频www| 色猫猫成人app| 91豆麻精品91久久久久久| 免费国产a级片| av在线加勒比| 亚洲成人av一区| 国产aaa免费视频| 影音先锋在线视频| 亚洲女人的天堂| 亚洲第一页在线视频| av在线收看| 国产欧美一二三区| 欧美日韩一区在线视频| 三级av在线| 久久久久久亚洲综合| 久久精品第九区免费观看| 国产91久久久| av电影在线观看一区| 精品欧美一区二区三区久久久| 亚洲欧美另类日韩| 丰满少妇久久久久久久| 国产精品日韩一区二区| 蜜臀久久精品久久久久| www.亚洲人| 久久综合伊人77777麻豆| 日本五码在线| 国产亚洲视频系列| 亚洲成人av动漫| 午夜在线免费观看视频| 亚洲免费高清视频在线| 欧美 亚洲 视频| 国产高清在线a视频大全| 亚洲图片欧美色图| 激情综合在线观看| 欧美123区| 91麻豆精品国产91久久久使用方法 | 国产精品v日韩精品v在线观看| 成人全视频在线观看在线播放高清 | 成人黄色大片网站| 亚洲性色av| 欧美性猛交xxxxxxxx| 中文字幕1234区| 亚洲欧美一级| 日韩免费视频线观看| 国产精品久久久久久久无码| 国产精品片aa在线观看| 久久精品视频一| 日韩免费av片| 日韩影院在线观看| 91视频免费网站| 天堂在线观看av| 中文字幕第一区综合| av不卡在线免费观看| xxxx成人| 欧美日韩小视频| 中文字幕国产免费| 欧美交a欧美精品喷水| 亚洲欧美成人网| 最新一区二区三区| 欧美专区18| 91久久久久久国产精品| 亚洲欧美日韩成人在线| 中文字幕一区二区三区不卡 | 日韩福利视频网| 99久久无色码| 国产免费av高清在线| 亚洲精品大片www| 男女无套免费视频网站动漫| 免费精品一区| 在线日韩精品视频| 国产特黄大片aaaa毛片| 国模无码大尺度一区二区三区| 精品国产乱码久久久久久蜜柚| 午夜小视频在线| 日韩欧美中文字幕在线观看| 青娱乐精品在线| 国产乱码精品一区二区三区四区 | 自由日本语热亚洲人| 日韩欧美的一区| 国产精品久久久免费看| 日韩天天综合| 不卡一区二区三区四区五区| 成人在线免费公开观看视频| 五月激情综合色| 女同性αv亚洲女同志| 久久激情电影| 日韩av电影在线播放| 黄色一级大片在线免费看国产| 国产精品久久久久久久久久久免费看 | 丝袜 亚洲 另类 欧美 重口| 可以免费看不卡的av网站| 国产精品视频免费观看| av网站免费在线观看| 欧美三级在线播放| 久久精品无码一区| 久久精品首页| 欧美成熟毛茸茸复古| 狂野欧美性猛交xxxxx视频| 69精品人人人人| 2017亚洲天堂| 久久精品国产**网站演员| 日本一区二区三区在线视频 | 国产在线观看免费网站| 欧美日韩中文字幕日韩欧美| 亚洲精品国产成人av在线| 欧美 日韩 国产 一区| 91免费观看网站| 日本a级在线| 在线播放视频一区| 国产尤物在线播放| 久久成人免费日本黄色| 在线免费观看一区二区三区| 日韩三级成人| 欧美成人精品三级在线观看| jlzzjlzz亚洲女人18| 中文字幕亚洲电影| 17c国产在线| 999视频精品| 18成人在线| 超碰中文在线| 日韩av影院在线观看| 国产成人精品一区二三区| 久久婷婷成人综合色| 国产精品99久久免费黑人人妻| 国产成人三级| 国产日韩av高清| www久久日com| 亚洲成色777777女色窝| 欧美激情亚洲综合| 亚洲国产成人午夜在线一区 | 盗摄精品av一区二区三区| 国产精品第157页| 欧美重口另类| 国产精品美女久久| av网站免费在线观看| 亚洲精品电影网| 青青国产在线视频| 亚洲情趣在线观看| 中文字幕a在线观看| 亚洲欧美日本视频在线观看| 久久这里精品国产99丫e6| 欧美日韩尤物久久| 九九热r在线视频精品| 日本人妻熟妇久久久久久| 91国偷自产一区二区开放时间| 91制片厂在线| 成人精品一区二区三区四区 | 欧美成人综合色| 91在线porny国产在线看| 欧美两根一起进3p做受视频| 91九色精品| 久久久婷婷一区二区三区不卡| 国产91精品在线| 欧美激情亚洲激情| 国产在线视频网址| 日韩欧美一卡二卡| 久久久久久亚洲av无码专区| 亚洲欧美国产毛片在线| 国产精品300页| 激情欧美一区二区三区在线观看| 男人添女荫道口女人有什么感觉| 精品久久不卡| 国产精品9999久久久久仙踪林| 日日av拍夜夜添久久免费| 欧美成人免费va影院高清| 青梅竹马是消防员在线| 日韩视频免费直播| 中文字幕一区二区在线视频| 亚洲成av人片在线| 搜索黄色一级片| 久久精品亚洲国产奇米99| 巨乳女教师的诱惑| 美女视频网站黄色亚洲| 日本在线xxx| 亚洲欧美一级二级三级| 亚洲精品中文综合第一页| 日韩最新在线| 丁香五月网久久综合| 四虎精品在线观看| 国产精品久久久久久久久久ktv | 国产精品久久久久久久久免费看| 大黄网站在线观看| 久久久国产91| 午夜免费播放观看在线视频| 精品中文字幕久久久久久| 亚洲精品人妻无码| 538在线一区二区精品国产| 成人黄色激情视频| 色综合一个色综合| 黄网在线观看视频| 精品久久久久久久久久久久| 久操免费在线视频| 亚洲欧美日韩国产综合在线| 久久日免费视频| 国产午夜精品一区二区三区嫩草| 182在线视频| 成人app下载| 稀缺呦国内精品呦| 国产黄色91视频| 精品国产午夜福利在线观看| 激情成人午夜视频| 亚洲18在线看污www麻豆| 欧美a级一区二区| 老头吃奶性行交视频| 日韩经典中文字幕一区| 国产成人av影视| 日韩精品国产欧美| 手机在线看福利| 免费观看久久久4p| 国内自拍视频网| 蜜桃久久久久久久| 国产精品区在线| 国产在线精品免费av| 伊人成人免费视频| 国产99精品视频| 亚洲麻豆一区二区三区| 成人高清伦理免费影院在线观看| 日本精品一二三区| 91碰在线视频| 中文字幕人妻一区二区三区在线视频| 国产亚洲短视频| 欧美成人久久久免费播放| 国产精品久久久久久亚洲毛片 | 精品一区二区三区国产| 欧洲vs亚洲vs国产| 久久精品国产99精品国产亚洲性色| 欧美绝顶高潮抽搐喷水合集| 久久青青草综合| 成人精品影院| 国产一级大片免费看| 最新亚洲视频| 欧美一级黄色影院| 国产伦精品一区二区三区免费迷| 麻豆av免费看| 久久亚洲精华国产精华液| 中文国语毛片高清视频| 一片黄亚洲嫩模| 久久永久免费视频| 9191精品国产综合久久久久久| 亚洲成人黄色片| 亚洲另类图片色| 国产黄色在线观看| 2020国产精品视频| 亚州精品国产| 精品不卡在线| 天天射综合网视频| 日韩av高清在线看片| 奇米精品一区二区三区四区 | 国产精品国产成人国产三级| 欧美成人免费看| 色999日韩国产欧美一区二区| 国产男女裸体做爰爽爽| 亚洲第一福利视频| 色老头视频在线观看| 国a精品视频大全| 久久精品资源| 精品久久久久久中文字幕动漫| 欧美系列电影免费观看| 国产 欧美 日韩 一区| 日韩成人免费电影| 国产精品日日摸夜夜爽| 日本一区二区三级电影在线观看| 久久久久噜噜噜亚洲熟女综合| 色天天综合色天天久久| 亚洲免费国产视频| 中文字幕亚洲图片| 亚洲最大成人| 国产91社区| 欧美jizz| 日本www高清视频| www.亚洲激情.com| 久草综合在线视频| 欧美中文字幕不卡| 性感美女福利视频| 欧美老女人性生活| 欧美天堂一区二区| 欧美精品亚洲精品| a91a精品视频在线观看| 亚洲第一区第二区第三区| 久久久久久免费| 日韩久久精品视频| 日韩一区二区在线免费观看| 1024国产在线| 国产不卡一区二区在线播放| 国产毛片久久久| 五月天激情图片| 九色|91porny| 国产破处视频在线观看| 色综合天天综合狠狠| 人妻精品无码一区二区| 色综合色综合久久综合频道88| 成人在线中文| 亚洲欧美综合一区| 日韩不卡一二三区| 美女爆乳18禁www久久久久久 | 国产xxxx孕妇| 久久韩国免费视频| 日韩免费在线电影| 一区二区三区四区视频在线| 日韩 欧美一区二区三区| 男女黄床上色视频| 色综合天天做天天爱| 黄色的视频在线免费观看| 国产91精品在线播放| 免费欧美一区| caoporn超碰97| 国产日韩亚洲欧美综合| 精品久久久久久久久久久久久久久久久久| 亚洲精品乱码久久久久久按摩观| 大香伊人久久| 久久草视频在线看| 久久国产精品99国产| 亚洲v国产v欧美v久久久久久| 色综合色狠狠天天综合色| 黄色av网址在线免费观看| 国产精品久久久久一区二区| 精品国产一区二区三区久久久樱花| 久久精品99国产| 欧美高清在线一区二区| 一级欧美一级日韩| 久久综合国产精品台湾中文娱乐网| 超碰国产精品一区二页| 中国一级黄色录像| 丁香六月综合激情| 国产精品久久久久久人| 国产一区二区三区视频在线观看 | 亚洲免费婷婷| 熟女少妇内射日韩亚洲| 欧美日韩国产一区二区三区地区| 巨大荫蒂视频欧美另类大| 亚洲iv一区二区三区| 影音先锋日韩资源| 精品无码一区二区三区| 欧美三级三级三级| 性国产高清在线观看| 国产视频精品网| 日韩av成人高清| 粉嫩av性色av蜜臀av网站| 精品国产1区二区| 成人性生活av| 一区二区三区欧美成人| 岛国精品在线观看| 中文字幕xxxx| 欧美xxxx做受欧美.88| 欧美a级网站| 在线观看免费的av| 亚洲成av人综合在线观看| 国产一二三在线观看| 亚洲精品日产aⅴ| 美女精品在线| 中文字幕手机在线观看| 亚洲精品资源美女情侣酒店| 亚洲免费看片| 日本不卡在线观看视频| 亚洲欧美在线观看| 天天躁日日躁狠狠躁喷水| 国产精品一区二区三| 亚洲人成毛片在线播放女女| 狂野欧美性猛交| 国产视频精品一区二区三区| 成人免费91| 少妇黄色一级片| 亚洲高清免费在线|