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

騰訊女后端設(shè)計(jì)了一套短鏈系統(tǒng),當(dāng)場就想給她 offer!

開發(fā) 后端
本文通過一個(gè)客服評價(jià)的短信開始,分析了短鏈的構(gòu)成,短鏈跳轉(zhuǎn)的原理,同時(shí)也給出了業(yè)內(nèi)的一些實(shí)現(xiàn)算法,以及一些架構(gòu)上的建議。

Hi,你好,我是猿java

如下圖,對于這種客評短信,相信大家并不陌生,通過點(diǎn)擊短信里“藍(lán)色字體”跳轉(zhuǎn)到一個(gè)具體的網(wǎng)頁。

其實(shí),上圖中那串藍(lán)色字符,有個(gè)美麗的專業(yè)術(shù)語:短鏈。它可以是一個(gè) URL地址,也可以是一個(gè)二維碼。而整個(gè)跳轉(zhuǎn)流程的背后是一套完整的短鏈系統(tǒng),因此,今天我們來一起分析:如何設(shè)計(jì)一套高性能短鏈系統(tǒng)。

一、為什么需要短鏈?

存在即合理,這里列舉三個(gè)主要原因。

(1) 相對安全

短鏈不容易暴露訪問參數(shù),生成方式可以完全迎合短信平臺的規(guī)則,能夠有效地規(guī)避關(guān)鍵詞、域名屏蔽等風(fēng)險(xiǎn),而原始 URL地址,很可能因?yàn)榘厥庾址欢绦畔到y(tǒng)誤判,導(dǎo)致鏈接無法跳轉(zhuǎn)。

(2) 美觀

對于精簡的文字,似乎更符合美學(xué)觀念,不太讓人產(chǎn)生反感。

(3) 平臺限制

短信發(fā)送平臺有字?jǐn)?shù)限制,在整條短信字?jǐn)?shù)不變的前提下,把鏈接縮短,其他部分的文字描述就能增加,這樣似乎更能達(dá)到該短信的實(shí)際目的(比如,營銷)。

二、短鏈的組成

如下圖,短鏈的組成通常包含兩個(gè)部分:域名 + 隨機(jī)碼

短鏈的域名最好和其他業(yè)務(wù)域名分開,而且要盡量簡短,可以不具備業(yè)務(wù)含義(比如:xyz.com),因?yàn)槎替湸蟛糠质怯糜跔I銷,可能會(huì)被三方平臺屏蔽。

短鏈的隨機(jī)碼需要全局唯一,建議 10位以下。

三、短鏈的跳轉(zhuǎn)原理

首先,我們先看一個(gè)短鏈跳轉(zhuǎn)的簡單例子,如下代碼,定義了一個(gè) 302重定向的代碼示例:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.servlet.view.RedirectView;

@Controller
publicclass RedirectController {

@GetMapping("/{shortCode}")
public RedirectView redirect(@PathVariable String shortCode) {
    String destUrl = "https://yuanjava.com";
    // destUrl = getDestUrlByShortCode(shortCode); //真實(shí)的業(yè)務(wù)邏輯
    returnnew RedirectView(destUrl);
  }

接著,在瀏覽器訪問短鏈”http://127.0.0.1:8080/s2TYdWd” 后,請求會(huì)被重定向到 https://yuanjava.com ,下圖為瀏覽器控制臺信息:

從上圖,我們看到了 302狀態(tài)碼并且請求被 Location到另外一個(gè) URL,整個(gè)交互流程圖如下:

是不是有一種偷梁換柱的感覺???

最后,總結(jié)下短鏈跳轉(zhuǎn)的核心思想:

  • 生成隨機(jī)碼,將隨機(jī)碼和目標(biāo) URL(長鏈)的映射關(guān)系存入數(shù)據(jù)庫;
  • 用域名+隨機(jī)碼生成短鏈,并推送給目標(biāo)用戶;
  • 當(dāng)用戶點(diǎn)擊短鏈后,請求會(huì)先到達(dá)短鏈系統(tǒng),短鏈系統(tǒng)根據(jù)隨機(jī)碼查找出對應(yīng)的目標(biāo) URL,接著將請求 302重定向到目標(biāo) URL(長鏈);

關(guān)于重定向有 301 和 302兩種,如何選擇?

  • 302,代表臨時(shí)重定向:每次請求短鏈,請求都會(huì)先到達(dá)短鏈系統(tǒng),然后重定向到目標(biāo) URL(長鏈),這樣,方便短鏈系統(tǒng)做一些統(tǒng)計(jì)點(diǎn)擊數(shù)等操作;通常采用 302
  • 301,代表永久重定向:第一次請求拿到目標(biāo)長鏈接后,下次再次請求短鏈,請求不會(huì)到達(dá)短鏈系統(tǒng),而是直接跳轉(zhuǎn)到瀏覽器緩存的目標(biāo) URL(長鏈),短鏈系統(tǒng)只能統(tǒng)計(jì)到第一次訪問的數(shù)據(jù);一般不采用 301。

四、如何生成短鏈?

從短鏈組成章節(jié)可知:短鏈=域名+隨機(jī)碼,因此,如何生成短鏈的問題變成了如何生成一個(gè)全局唯一的隨機(jī)碼,通常會(huì)有 3種做法:

1. Base62

Base62 表示法是一種基數(shù)為62的數(shù)制系統(tǒng),包含26個(gè)英文大寫字母(A-Z),26個(gè)英文小寫字母(a-z)和10個(gè)數(shù)字(0-9)。這樣,共有62個(gè)字符可以用來表示數(shù)值。如下代碼:

import java.security.SecureRandom;

publicclass RandomCodeGenerator {
privatestaticfinal String CHAR_62 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
privatestaticfinal SecureRandom random = new SecureRandom();

public static String generateRandomCode(int length) {
    StringBuilder sb = new StringBuilder(length);
    for (int i = 0; i < length; i++) {
      int rndCharAt = random.nextInt(CHAR_62.length());
      char rndChar = CHAR_62.charAt(rndCharAt);
      sb.append(rndChar);
    }
    return sb.toString();
  }
}

對于 Base62算法,如果是生成 6位隨機(jī)數(shù)有 62^6 - 1 = 56800235583(568億多),如果是生成 7位隨機(jī)數(shù)有 62^7 - 1 = 3521614606208(3.5萬億多),足夠使用。

2. Hash算法

Hash算法是我們最容易想到的辦法,比如 MD5, SHA-1, SHA-256, MurmurHash, 但是這種算法生成的 Hash值還是比較長,常用的做法是把這個(gè) Hash值進(jìn)行 62/64進(jìn)行壓縮。

如下代碼,通過 Google的 MurmurHash算法把長鏈 Hash成一個(gè) 32位的 10進(jìn)制正數(shù),然后再轉(zhuǎn)換成62進(jìn)制(壓縮),這樣就可以得到一個(gè) 6位隨機(jī)數(shù),

import com.google.common.hash.HashFunction;
import com.google.common.hash.Hashing;
import java.nio.charset.StandardCharsets;

publicclass MurmurHashToBase62 {

    privatestaticfinal String BASE62 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    public static String toBase62(int value) {
        StringBuilder sb = new StringBuilder();
        while (value > 0) {
            sb.insert(0, BASE62.charAt(value % 62));
            value /= 62;
        }
        return sb.toString();
    }
    public static void main(String[] args) {
        // 長鏈
        String input = "https://yuanjava.cnposts/short-link-system/design?code=xsd&page=1";
        // 長鏈利用 MurmurHash算法生成 32位 10進(jìn)制數(shù)
        HashFunction hashFunction = Hashing.murmur3_32();
        int hash = hashFunction.hashString(input, StandardCharsets.UTF_8).asInt();
        if (hash < 0) {
            hash = hash & 0x7fffffff; // Convert to positive by dropping the sign bit
        }
        // 將 32位 10進(jìn)制數(shù) 轉(zhuǎn)換成 62進(jìn)制
        String base62Hash = toBase62(hash);
        System.out.println("base62Hash:" + base62Hash);
    }
}

3. 全局唯一 ID

比如,很多大中型公司都會(huì)有自己全局唯一 ID 的生成服務(wù)器,可以使用這些服務(wù)器生成的 ID來保證全局唯一,也可以使用雪花算法生成全局唯一的ID,再經(jīng)過 62/64進(jìn)制壓縮。

五、如何解決沖突?

對于上述 3種方法的前 2種:Base62 或者 Hash算法,因?yàn)楸举|(zhì)上都是哈希函數(shù),所以,不可避免地會(huì)產(chǎn)生哈希沖突,盡管沖突的概率已經(jīng)很低很低了,so,萬一沖突了,該如何解決呢?

要解決沖突,首先需要檢測 Hash沖突,通常來說有 2種檢測方法。

1. 數(shù)據(jù)庫鎖

這里以 MySQL數(shù)據(jù)庫為例,表結(jié)構(gòu)如下:

CREATE TABLE`short_url_map` (
`id`int(11) unsignedNOTNULL AUTO_INCREMENT,
`long_url`varchar(160) DEFAULTNULLCOMMENT'長鏈',
`short_url`varchar(10) DEFAULTNULLCOMMENT'短鏈',
`gmt_create`int(11) DEFAULTNULLCOMMENT'創(chuàng)建時(shí)間',
  PRIMARY KEY (`id`),
UNIQUEINDEX'short_url' ('short_url')
) ENGINE=InnoDBDEFAULTCHARSET=utf8;

首先創(chuàng)建一張長鏈和短鏈的關(guān)系映射表,然后通過給 short_url字段添加唯一鎖,這樣,當(dāng)數(shù)據(jù)插入時(shí),如果存在 Hash沖突(short_url值相等),數(shù)據(jù)庫就會(huì)拋錯(cuò),插入失敗,因此,可以在業(yè)務(wù)代碼里捕獲對應(yīng)的錯(cuò)誤,這樣就能檢測出沖突。

也可以先用 short_url去查詢,如果能查到數(shù)據(jù),說明 short_url存在 Hash沖突了。

對于這種通過查詢數(shù)據(jù)庫或者依賴于數(shù)據(jù)庫唯一鎖的機(jī)制,因?yàn)槎忌婕癉B操作,對數(shù)據(jù)庫是一個(gè)額外的開銷,如果流量比較大的話,需要保證數(shù)據(jù)庫的性能。

2. 布隆過濾器

在 DB操作的上游增加一個(gè)布隆過濾器,在長鏈生成短鏈后, 先用短鏈在布隆過濾器中進(jìn)行查找,如果存在就代表沖突了,如果不存在,說明 DB里不存在此短鏈,可以插入。對于布隆過濾器的選擇,單機(jī)可以采用 Google的布隆過濾器,分布式可以使用 RedisBloom。

整體流程可以抽象成下圖:

檢測出了沖突,需要如何解決沖突?

再 Hash,可以在長鏈后面拼接一個(gè) UUID之類的隨機(jī)字符串,然后再次進(jìn)行 Hash,用得出的新值再進(jìn)行上述檢測,這樣 Hash沖突的概率又大大大降低了。

六、高并發(fā)場景的架構(gòu)

在流量不大的情況,上述方法怎么折騰似乎都合理,但是,為了架構(gòu)的健壯性,很多時(shí)候需要考慮高并發(fā),大流量的場景,因此架構(gòu)需要支持水平擴(kuò)展,比如:

  • 采用微服務(wù)
  • 功能模塊分離,比如,短鏈生成服務(wù)和長鏈查詢服務(wù)分離
  • 功能模塊需要支持水平擴(kuò)容,比如:短鏈生成服務(wù)和長鏈查詢服務(wù)能支持動(dòng)態(tài)擴(kuò)容
  • 緩解數(shù)據(jù)庫壓力,比如,分區(qū),分庫分表,主從,讀寫分離等機(jī)制
  • 服務(wù)的限流,自保機(jī)制
  • 完善的監(jiān)控和預(yù)警機(jī)制

這里給出一套比較完整的設(shè)計(jì)思路圖:

七、總結(jié)

本文通過一個(gè)客服評價(jià)的短信開始,分析了短鏈的構(gòu)成,短鏈跳轉(zhuǎn)的原理,同時(shí)也給出了業(yè)內(nèi)的一些實(shí)現(xiàn)算法,以及一些架構(gòu)上的建議。

對于業(yè)務(wù)體量小的公司,可以根據(jù)成本來搭建服務(wù)(單機(jī)或者少量服務(wù)器做負(fù)載),對于業(yè)務(wù)體量比較大的公司,更多需要考慮到高并發(fā)的場景,如何保證服務(wù)的穩(wěn)定性,如何支持水平擴(kuò)展,當(dāng)服務(wù)出現(xiàn)問題時(shí)如何具備一套完善的監(jiān)控和預(yù)警服務(wù)器。

其實(shí),很多系統(tǒng)都是在一次又一次的業(yè)務(wù)流量挑戰(zhàn)下成長起來的,我們需要不斷打磨自己宏觀看架構(gòu),微觀看代碼的能力,這樣自己也就跟著業(yè)務(wù),系統(tǒng)一起成長起來了。

責(zé)任編輯:趙寧寧 來源: 猿java
相關(guān)推薦

2024-11-19 16:31:23

2024-11-12 08:13:09

2021-05-27 07:12:19

單點(diǎn)登錄系統(tǒng)

2022-11-12 17:50:02

Web服務(wù)器微服務(wù)

2025-02-21 08:17:13

2024-09-23 04:00:00

java架構(gòu)分布式系統(tǒng)

2022-09-13 17:45:40

長網(wǎng)址短鏈系統(tǒng)

2025-04-07 07:45:00

AI模型神經(jīng)網(wǎng)絡(luò)

2025-06-23 08:23:04

2022-10-09 14:15:42

短鏈設(shè)計(jì)

2022-09-13 08:01:58

短鏈服務(wù)哈希算法字符串

2022-11-08 17:38:34

MySQL數(shù)據(jù)庫并發(fā)

2021-05-06 11:06:52

人工智能語音識別聲聞檢索

2022-08-04 00:05:11

系統(tǒng)分布式流量

2021-06-28 09:56:54

微軟AI編程

2023-08-10 10:13:35

轉(zhuǎn)轉(zhuǎn)短鏈平臺

2025-09-28 01:50:00

2025-06-04 03:15:00

高并發(fā)短鏈系統(tǒng)

2023-07-26 13:29:43

高性能短鏈系統(tǒng)

2019-10-11 15:58:25

戴爾
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

www.com黄色片| 欧美亚洲另类久久综合| 久久久久成人片免费观看蜜芽| 亚洲视频国产精品| 欧美日韩精品在线观看| 日韩av影视| 午夜精品久久久久久久爽| 激情综合中文娱乐网| 一区二区三欧美| 日本成人在线免费| 国产另类xxxxhd高清| 亚洲激情综合网| 日韩欧美视频一区二区| 国内老熟妇对白hdxxxx| 三级不卡在线观看| 欧美日韩国产第一页| 一级片视频免费看| 在线精品国产亚洲| 欧美视频精品在线| 人人妻人人澡人人爽欧美一区双 | 日韩电影在线观看中文字幕| 午夜在线观看av| 超碰资源在线| 亚洲精品国产无套在线观| 日本婷婷久久久久久久久一区二区 | 婷婷成人激情在线网| 五月天男人天堂| 黄色在线播放| 99re在线精品| 国产成人精品日本亚洲11| 中文字幕精品在线观看| 在线综合视频| 久久久久久久色| 黄色片在线观看网站| av永久不卡| 亚洲欧美精品中文字幕在线| 色哟哟视频在线| 精品国产亚洲一区二区三区在线| 欧美在线不卡一区| 欧美在线观看成人| 蜜桃视频在线观看免费视频| 亚洲男人的天堂在线aⅴ视频| 色之综合天天综合色天天棕色| 色视频在线观看| 99re热这里只有精品视频| 国产精品久久国产三级国电话系列| 国产一区二区三区三州| 日韩有码一区二区三区| 青青草成人在线| 亚洲av中文无码乱人伦在线视色| av成人毛片| 97碰在线观看| 国产成人精品网| 久久av在线| 日本精品免费观看| 亚洲 欧美 中文字幕| 美女视频一区免费观看| 欧美最猛性xxxx| 波多野结衣视频网站| 新狼窝色av性久久久久久| 欧美性视频在线| 秋霞精品一区二区三区| 丝袜国产日韩另类美女| 国产精品久久一| 一级特黄aaa大片| 精品伊人久久久久7777人| 成人xvideos免费视频| 国产又粗又猛又黄又爽无遮挡| 精品无码三级在线观看视频| 成人性教育视频在线观看| 国产高潮流白浆喷水视频| 风流少妇一区二区| 久久国产日韩欧美| 国产一区精品| 亚洲精品日韩综合观看成人91| 精品视频在线观看一区二区| 免费在线观看的电影网站| 亚洲成人激情综合网| 欧美牲交a欧美牲交aⅴ免费真| 成人在线爆射| 91精品国产综合久久精品| 久久久久亚洲AV成人网人人小说| 日韩人体视频| 在线视频中文亚洲| 久久成人在线观看| 久久精品系列| 91亚洲精品一区二区| 日本波多野结衣在线| 久久久久国产精品厨房| 91香蕉视频网址| 阿v视频在线观看| 欧美性色综合网| 不许穿内裤随时挨c调教h苏绵 | 精品一区二区三区免费播放| www.久久久| 成人在线免费电影| 亚洲国产精品一区二区久久| 欧美三级理论片| www.国产精品一区| 在线观看中文字幕亚洲| 国产在线观看免费视频今夜| 水野朝阳av一区二区三区| 91在线精品视频| 国产午夜在线观看| 一区二区三区日韩欧美精品| 欧美成人黑人猛交| 99re8这里有精品热视频免费| 亚洲欧美在线免费观看| 欧美日韩大片在线观看| 日本中文一区二区三区| 国产精品xxx在线观看www| 成人高清免费观看mv| 亚洲国产精品一区二区www在线| 国产又大又黄又粗的视频| a看欧美黄色女同性恋| 揄拍成人国产精品视频| 毛片a片免费观看| 麻豆久久一区二区| 欧美精品一区二区三区在线四季| 欧美极品少妇videossex| 欧美日韩久久一区二区| 我和岳m愉情xxxⅹ视频| 亚洲高清自拍| 91久久久久久久久| av在线播放av| 91国产免费观看| 玖草视频在线观看| 国产中文一区| 91久久精品国产91久久性色tv | 国产精品国产三级国产aⅴ中文| 欧美在线观看成人| 久久精品亚洲成在人线av网址| 久久影视电视剧免费网站清宫辞电视| 一级黄色av片| 久久综合精品国产一区二区三区| 99热亚洲精品| 综合激情五月婷婷| 九九久久综合网站| 国产精品-色哟哟| 国产精品久久福利| 高清一区在线观看| 欧美偷拍综合| 国产精品无码专区在线观看| 高清福利在线观看| 在线影院国内精品| 国产真人真事毛片视频| 日韩高清欧美激情| 日本一区二区精品| 精品裸体bbb| 最近免费中文字幕视频2019| 中国精品一区二区| 中文字幕第一区| 91精品无人成人www| 欧美色女视频| 成人亚洲激情网| 91福利国产在线观看菠萝蜜| 欧美一区二区三区在线看| 人妻少妇精品一区二区三区| 国产一区二区三区免费观看| 四虎4hu永久免费入口| 精品一区二区三区中文字幕 | 国产一区二区三区影院| 99久久婷婷国产| 成人羞羞国产免费网站| 欧美色图一区| 亚洲一区二区三区在线免费观看| 在线免费观看a视频| 欧美成人乱码一区二区三区| 亚洲日本韩国在线| 国产日韩欧美麻豆| 中文字幕精品一区二区三区在线| 中文字幕日韩一区二区不卡| 国产日本一区二区三区| 欧美日韩精品免费观看视完整| 中文字幕欧美日韩在线| 97精品久久人人爽人人爽| 亚洲免费在线看| 捆绑凌虐一区二区三区| 首页欧美精品中文字幕| 在线观看免费91| 日韩视频在线直播| 国产91精品久久久久久| 婷婷在线视频| 亚洲第一级黄色片| 波多野结衣电影在线播放| 中文字幕字幕中文在线中不卡视频| 国产老头和老头xxxx×| 另类国产ts人妖高潮视频| 一区二区成人国产精品| 丁香综合av| 国产精品女主播| 国产精品一品| 最新中文字幕亚洲| 天天射天天操天天干| 欧美日韩在线直播| 国产精品 欧美 日韩| 国产精品视频在线看| 催眠调教后宫乱淫校园| 日本亚洲欧美天堂免费| 成人免费在线网| 奇米影视亚洲| 久久99精品久久久久久青青日本 | 亚洲国产精品综合| 综合伊人久久| 国产精品一区二区性色av| 日本精品600av| 中文字幕无线精品亚洲乱码一区 | 亚洲愉拍自拍另类高清精品| 真实乱视频国产免费观看| 国产精品一区二区男女羞羞无遮挡| 中国丰满人妻videoshd| 这里只有精品在线| 亚洲精品日韩精品| 西瓜成人精品人成网站| 91国产在线免费观看| 成人亚洲网站| 日本成人精品在线| 97人人在线视频| 欧美成人精品影院| 欧美日韩视频在线播放| 亚洲欧美成人一区二区在线电影| 亚洲精品一区二区三区区别| 欧美日本一区二区| 神马久久久久久久| 婷婷六月综合网| 日本少妇久久久| 一卡二卡三卡日韩欧美| 91高清免费观看| 国产精品久久久久久户外露出| xxxx日本免费| 久久色在线视频| 亚洲av无码国产精品久久| 白白色亚洲国产精品| 91超薄肉色丝袜交足高跟凉鞋| 国产呦萝稀缺另类资源| av噜噜在线观看| 久久狠狠亚洲综合| 成人日韩在线视频| 美女网站在线免费欧美精品| 波多野结衣天堂| 日本欧美在线看| 亚洲高清在线免费观看| 日韩国产高清在线| 丁香婷婷激情网| 日韩av一二三| 中日韩av在线播放| 精品夜夜嗨av一区二区三区| 午夜免费看视频| 国产在线一区二区综合免费视频| 久久国产精品国产精品| 另类小说一区二区三区| 午夜精品免费看| 国产在线视频一区二区三区| 日韩精品在线播放视频| 国产传媒日韩欧美成人| 欧美xxxxx少妇| 99在线精品观看| 国产手机在线观看| 国产精品美女视频| 欧美第一页在线观看| 亚洲激情欧美激情| 男人天堂中文字幕| 福利视频导航一区| 老熟妇一区二区三区啪啪| 欧美区在线观看| 亚洲av综合色区无码一二三区| 精品国产欧美一区二区| 头脑特工队2在线播放| 亚洲人成伊人成综合网久久久| 不卡在线视频| 欧美成在线观看| 忘忧草在线日韩www影院| 日本一区二区不卡| 日韩免费大片| 国产精品视频免费一区二区三区 | 中文字幕中文字幕99| 综合在线视频| 日韩av综合在线观看| 日本不卡中文字幕| 乳色吐息在线观看| 久久嫩草精品久久久精品一| 懂色av粉嫩av浪潮av| 一区二区免费在线播放| 国产情侣自拍av| 在线播放/欧美激情| 手机看片福利在线| 在线观看不卡av| 免费在线中文字幕| 国产精品网址在线| 国产日韩三级| 亚洲一区二区三区色| 国产精品99免费看| 91极品视频在线观看| 成a人片亚洲日本久久| 国产91丝袜美女在线播放| 亚洲资源中文字幕| 怡春院在线视频| 日韩精品视频中文在线观看 | 18欧美乱大交hd1984| 亚洲一区 二区| 久热这里只精品99re8久| 日韩精品免费一区二区三区| 中文字幕の友人北条麻妃| 亚洲欧美日韩国产一区二区| 亚洲制服中文字幕| 91啪亚洲精品| 麻豆视频在线观看| 欧美无乱码久久久免费午夜一区| 人妻视频一区二区三区| 日韩在线观看网站| 中文字幕资源网在线观看免费| 川上优av一区二区线观看| 国产一区二区亚洲| 9久久9毛片又大又硬又粗| 国产伦精品一区二区三区免费| 国产三级国产精品| 亚洲综合丝袜美腿| 国产又黄又大又爽| 中文字幕免费国产精品| 蜜桃av在线| 国产精品一区二区免费看| 婷婷综合亚洲| 欧美精品性生活| 久久久久久综合| 国产一级特黄aaa大片| 日韩欧美中文字幕制服| 日本高清视频在线观看| 国产精品成人av性教育| 亚洲毛片免费看| 国产午夜福利100集发布| 国产成+人+日韩+欧美+亚洲| 女教师淫辱の教室蜜臀av软件| 91成人在线精品| 美女欧美视频在线观看免费| 国产+人+亚洲| 狠狠久久伊人| 免费看黄在线看| 成人18精品视频| 日韩精品人妻中文字幕| 精品99一区二区三区| 免费av不卡在线观看| 99re资源| 影音先锋日韩资源| 亚洲激情 欧美| 亚洲1区2区3区4区| 性xxxxbbbb| 欧美一级大片在线观看| 台湾色综合娱乐中文网| 北条麻妃69av| 久久精品视频在线看| 中文字幕av第一页| 国产一区二区三区视频| 99精品国自产在线| 一区二区三区av| 国产一区在线不卡| 欧美三级 欧美一级| 精品国产一区二区三区久久久蜜月 | 国产一区视频导航| 免费成人深夜夜行网站| 日韩午夜中文字幕| av白虎一区| 欧美连裤袜在线视频| 日韩精品一二区| 男人的午夜天堂| 欧美r级电影在线观看| h片视频在线观看| 免费中文日韩| 六月婷婷色综合| 欧美人妻精品一区二区免费看| 精品欧美黑人一区二区三区| 国内精彩免费自拍视频在线观看网址| 欧美精品一区二区三区在线四季| 麻豆精品久久精品色综合| 欧美精品久久久久久久久46p| 精品国产人成亚洲区| 亚洲精品福利电影| 一级黄色免费在线观看| 粉嫩久久99精品久久久久久夜| 91午夜视频在线观看| 在线视频精品一| av成人综合| 丁香婷婷激情网| 亚洲黄色在线视频| 欧美成熟毛茸茸| 91在线观看免费| 久久久精品网| 欧美成欧美va| 亚洲一二在线观看| 日本一区影院| 热久久精品免费视频| 亚洲一区二区三区自拍| 阿v免费在线观看| 国产伦一区二区三区色一情| 日本不卡一区二区三区| 日本三级2019| 日韩在线播放一区| 亚洲欧洲av| 三大队在线观看| 欧美吻胸吃奶大尺度电影| 黄色在线看片|