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

這個主流大法竟是大坑!Redis 大 Key 問題怎么破?

數(shù)據(jù)庫 Redis
要解析 RDB 文件 ,首先得理解其二進制格式 ——Redis 的 RDB 文件是按特定協(xié)議存儲的二進制數(shù)據(jù) ,包含數(shù)據(jù)庫選擇、鍵值對數(shù)據(jù)、過期時間等信息。

在 Redis 運維中 ,大 Key 始終是威脅集群穩(wěn)定性的 “ 隱形炸彈”。我梳理 Redis 大 Key 解析系統(tǒng)時 ,在比較了scan查找大key方案 ,以及使用官方的redis-cli --bigkeys方案后 ,選擇 “基于 RDB的離線解析” 方案 —— 它完全不影響在線集群 ,還能獲取全量鍵的精確內(nèi)存數(shù)據(jù) ,特別適合非實時性的大 Key 排查場景(實時的可以用慢查詢系統(tǒng) ,這個以前曾在dbaplus分享過)。最近我用 Golang 實現(xiàn)了這套方案 ,今天就從場景需求、技術(shù)實現(xiàn)到實際落地 ,和大家詳細分享整個過程。

一、為什么要造這個 “輪子”?

市面上其實有現(xiàn)成的 RDB 解析工具( 比如 Python 寫的 redis-rdb-tools ),但在實際運維中,我遇到了兩個關(guān)鍵問題:

  • 性能瓶頸:面對 GB 級甚至更大的 RDB 文件 ,Python 工具解析耗時過長( 曾試過解析20GB 的 RDB ,跑了近 1 小時),而運維場景中常需要批量處理多集群的 RDB 文件 ,效率亟待提升;
  • 定制化不足:現(xiàn)有工具輸出的結(jié)果多是通用格式 ,無法直接對接我們內(nèi)部的運維平臺( 比如按業(yè)務(wù)線分類大 Key、 自動同步結(jié)果到 Grafana 面板),需要額外寫腳本二次處理。

考慮到 Golang 的并發(fā)優(yōu)勢和高性能特性 ,以及能直接編譯成二進制文件(方便在不同服務(wù)器部署),我決定用 Golang 從零實現(xiàn)—套 RDB 離線解析工具 ,核心目標是:快解析、可定制、易集成。

二、Golang 實現(xiàn) RDB 解析的核心思路

要解析 RDB 文件 ,首先得理解其二進制格式 ——Redis 的 RDB 文件是按特定協(xié)議存儲的二進制數(shù)據(jù) ,包含數(shù)據(jù)庫選擇、鍵值對數(shù)據(jù)、過期時間等信息。整個實現(xiàn)過程可以拆成 3 個核心步驟:

1. 準備工作:選擇合適的 RDB 解析庫

自己手寫 RDB 格式解析會耗費大量時間(要處理各種數(shù)據(jù)類型、壓縮格式),Golang 生態(tài)中有成熟的 RDB 解析庫可以復(fù)用, 選擇了  https://github.com/HDT3213/rdb (輕量、文檔清晰,支持 Redis 6.0 + 的 RDB 格式),本來打算導(dǎo)入這個庫的解析能力擴展 ,但研究發(fā)現(xiàn)這個庫不支持外部導(dǎo)出為內(nèi)部屬性 ,不能完全滿足需求 ,考慮再三 ,最后決定通過對項目進行部分魔改 ,通過replace依賴模塊指向魔改版本來處理。

2. 核心流程:從 RDB 文件到大 Key 數(shù)據(jù)

整個解析大key的流程很清晰:備份 RDB 文件 → 讀取 RDB 文件 → 解析鍵值對與內(nèi)存信息 →篩選大 Key → 輸出結(jié)果 ,下面—步步拆解關(guān)鍵代碼。

步驟 1 :讀取 RDB 文件并初始化解析器

首先要打開 RDB 文件 ,然后用 NewDecoder 初始化解析器, 同時定義—個 “結(jié)果處理器”(用來接收解析出的每—個鍵值對數(shù)據(jù))。

// 通過一個channel返回解析好的數(shù)據(jù),因為有多個rdb要解析,這里傳入一個channel統(tǒng)一接收,方便管理
func MyFindBiggestKeys(rdbFilename string, output chan<- RedisData,  options ...interface{}) error {
        var err error
        if rdbFilename == "" {
           return errors.New("src file path is required") 
        }


        rdbFile, err := os.Open(rdbFilename)
        if err != nil {
            return fmt.Errorf("open rdb %s failed, %v", rdbFilename, err) 
            }
    defer func() {
        _ = rdbFile.Close()
    }()
    var dec decoder = core.NewDecoder(rdbFile)
    if dec, err = wrapDecoder(dec, options...); err != nil {
        return err
    }
    err = dec.Parse(func(object model.RedisObject) bool {
        data := RedisData{
            Data: object,
            Err:  nil,
        }
        select {
        case output <- data:
            return true
        case <-time.After(5 * time.Second):
            err = errors.New("send to output channel timeout")
            return false
        }
    })


    if err != nil {
        return fmt.Errorf("parse rdb failed: %w", err) 
    }


    return nil
}

步驟 2:解析鍵值對 ,判斷是否為大 Key

這是最核心的部分 ,提取對應(yīng)的內(nèi)存大小 ,和task預(yù)設(shè)閾值對比 ,判斷是否為大 Key。

func (b *biz) ExecuteSingleTask(ctx context.Context, task *models.Task) error {
    // 1. 提取任務(wù)參數(shù)
    pwd := task.Dir
    jobID := task.JobID
    // 任務(wù)指定的大key閾值,由每個task任務(wù)傳遞
    size := task.Size


    // 2. 路徑處理
    path, err := mypath.GetLastDirAndFiles(pwd)
    if err != nil {
        return err
    }
    redisName := path.LastDirName
    files := path.Files
    slog.Info("process task", "taskID", task.ID, "redisName", redisName, "filesCount", len(files))


    // 3. Redis 數(shù)據(jù)處理
    ch := make(chan helper.RedisData, 1000)
    var wg sync.WaitGroup


    // 3.1 啟動生產(chǎn)者協(xié)程(讀取文件并發(fā)送到 channel)
    for _, file := range files {
        currentFile := pwd + "/" + file
        wg.Add(1)
        go func(filePath string) {
            defer wg.Done()
            if err := helper.MyFindBiggestKeys(filePath, ch); err != nil {  
                slog.Error("producer process file failed", "file", filePath,
    "err", err.Error())
                }
            }(currentFile)
        }
        // 3.2 啟動協(xié)程:等待生產(chǎn)者完成后關(guān)閉 channel
        go func() {
            wg.Wait()
            close(ch)
            slog.Info("task producer done, channel closed", "taskID", task.ID) 
        }()


        // 3.3 消費 channel 數(shù)據(jù)并存儲結(jié)果(
        for data := range ch {
            if data.Err != nil {
                slog.Error("data error", "error", data.Err)
                continue
        }
        
        if uint64(data.Data.GetSize()) <= *size {
            continue
        }

...

步驟 3: 輸出大 Key 結(jié)果。

解析完成后 ,需要將大 Key 結(jié)果以易讀的格式輸出。我這里實現(xiàn)了數(shù)據(jù)入庫(方便后續(xù)分析或接入運維平臺)。

// 構(gòu)造結(jié)構(gòu)體
        rediskey := &models.RedisKey{
            JobID:     jobID,
            RedisName: redisName,
            Key:       data.Data.GetKey(),
            Type:      data.Data.GetType(),
            Size:      int64(data.Data.GetSize()),
            CreatedAt: time.Now(),
        }
        
        if err := b.ResultV1().CreateTaskResult(ctx, rediskey); err != nil { 
            slog.Error("operation failed",
                "err", err,
                "key", data.Data.GetKey(),
            )
        }
        slog.Info("received data",
            "key", data.Data.GetKey(),
            "type", data.Data.GetType(),
            "size", data.Data.GetSize(),
        )
    }
    return nil
}

3. 性能優(yōu)化:讓解析更快

Golang 本身性能已經(jīng)很好 ,但面對超大 RDB 文件( 比如 20GB 以上),還是需要做—些優(yōu)化,主要從以下兩點入手:

優(yōu)化 1 :并發(fā)解析(利用 Golang 的協(xié)程)

RDB 文件是按Redis分片集群來備份導(dǎo)出的 ,核心思路是將不同RDB的解析任務(wù)分配到不同協(xié)程中 ,提升并行處理效率。具體代碼這里就不展開了 ,需要注意協(xié)程安全 ,用 sync.WaitGroup 等待所有協(xié)程完成。

優(yōu)化 2:減少內(nèi)存占用

解析大 RDB 文件時 ,容易出現(xiàn)內(nèi)存暴漲( 比如解析 20GB 的 RDB ,可能需要占用幾十 GB 內(nèi)存)。可以通過 “邊解析邊輸出” 的方式優(yōu)化:解析出—個大 Key 后 ,立即寫入channel ,而不是先存在切片中(避免大量數(shù)據(jù)堆積在內(nèi)存),入庫的協(xié)程讀取channel進行插入數(shù)據(jù)庫。

修改思路:將key ,parse過程中判斷是大 Key 后 ,直接寫入channel文件 ,無需存儲到切片。

三、實際落地:從代碼到運維工具

代碼寫完后 ,還需要做—些 “工程化” 處理 ,讓它成為真正能用的運維工具:

1. 編譯成二進制文件

Golang 可以跨平臺編譯 ,通過 Makefile可以快速支持編譯各種平臺的二進制文件 ,并且快速啟動調(diào)試:

# 運行程序(用于開發(fā)調(diào)試)
    run:
        @echo "運行程序 ..."
        go run $(MAIN_FILE) -c configs/rdb-server.yaml


    # 交叉編譯:生成Linux-amd64架構(gòu)的可執(zhí)行文件
    build-linux:
        @echo "編譯Linux-amd64架構(gòu)程序 ..."
        mkdir -p $(OUTPUT_DIR)
        GOOS=linux GOARCH=amd64 go build $(GO_BUILD_FLAGS) -o 
    $(OUTPUT_DIR)/$(BINARY_NAME)-linux-amd64 $(MAIN_FILE)
        @echo "Linux版本編譯完成:$(OUTPUT_DIR)/$(BINARY_NAME)-linux-amd64"


    # 交叉編譯:生成Windows-amd64架構(gòu)的可執(zhí)行文件
    build-windows:
        @echo "編譯Windows-amd64架構(gòu)程序 ..."
        mkdir -p $(OUTPUT_DIR)
        GOOS=windows GOARCH=amd64 go build 
    $(GO_BUILD_FLAGS) -o $(OUTPUT_DIR)/$(BINARY_NAME)-windows-amd64.exe $(MAIN_FILE)
        @echo "Windows版本編譯完成:$(OUTPUT_DIR)/$(BINARY_NAME)-windows-amd64.exe"

將二進制文件放到服務(wù)器上 ,直接運行即可:

./rdb-bigkey-linux-amd64  -c configs/rdb-server.yaml

2. 定時任務(wù)( 自動執(zhí)行)

通過定時任務(wù) ,設(shè)置每天低峰期自動執(zhí)行按集群列表執(zhí)行 RDB 備份任務(wù) ,備份任務(wù)完成后將結(jié)果入task表 ,任務(wù)自動觸發(fā)大key解析處理。

3. 集成到運維平臺

這里沒有開發(fā)前端 ,而是基于Grafana ,將大 Key 從數(shù)據(jù)庫(如 MySQL)讀取 ,再通過Grafana 配置面板 ,展? “每日大 Key 數(shù)量趨勢”“各業(yè)務(wù)線大 Key 分布” 等圖表 ,實現(xiàn)可視化監(jiān)控。公司如果有其他運維平臺 ,也可以集成進去 ,定制更靈活。

四、踩過的坑與解決方案

在實際測試和使用中 ,我遇到了幾個問題 ,這里分享給大家 ,避免踩坑:

坑 1 :RDB 文件格式不兼容

問題:解析某些老版本 Redis(如 Redis 4.0) 的 RDB 文件時 ,出現(xiàn)錯誤。

原因:采用的庫默認支持 Redis 6.0+ ,對老版本個別編碼不兼容。

解決方案:更換為支持多版本的庫 ,或者對解析程序源碼進行二次開發(fā)。

坑 2:解析超大 RDB 文件時內(nèi)存溢出

問題:解析 20GB 的 RDB 文件時 ,程序內(nèi)存占用超過 40GB ,被系統(tǒng) kill。

原因:默認情況下 ,解析器會將整個 RDB 文件的鍵值對加載到內(nèi)存 ,導(dǎo)致內(nèi)存暴漲。

解決方案:啟用 “流式解析” ,邊解析邊釋放內(nèi)存 —— 在 Decode 函數(shù)中 ,每解析完—個數(shù)據(jù)庫的鍵值對 ,就立即處理并釋放該數(shù)據(jù)庫的數(shù)據(jù) ,避免堆積。

五、總結(jié)與后續(xù)計劃

這套 Golang 實現(xiàn)的 RDB 大 Key 解析工具 , 目前已經(jīng)在我們公司的 Redis 集群中穩(wěn)定運行了 2個月 ,相比之前的 Python 工具 ,解析速度提升了 3-5 倍(解析 20GB RDB 文件從 1 小時縮短到15 分鐘左右),而且支持自定義閾值和結(jié)果輸出格式 ,非常靈活。

圖片

后續(xù)我計劃在現(xiàn)有基礎(chǔ)上增加兩個功能:

  • 業(yè)務(wù)線自動分類:根據(jù)鍵名前綴(如 user:info: 屬于用戶業(yè)務(wù) , order:detail: 屬于訂單業(yè)務(wù)), 自動給大 Key 打上業(yè)務(wù)標簽 ,方便定位責(zé)任團隊;
  • 大 Key 增長趨勢分析:將每天的大 Key 結(jié)果存入數(shù)據(jù)庫 ,對比分析 “某鍵是否連續(xù) 3 天為大Key”“內(nèi)存是否持續(xù)增長” ,提前預(yù)警潛在風(fēng)險。

如果你也在做 Redis 大 Key 治理 ,希望這篇實戰(zhàn)分享能給你帶來幫助。如果有更好的優(yōu)化思路或問題 ,歡迎交流!

作者介紹

劉宇,翼支付云原生存儲領(lǐng)域資深專家,深耕有狀態(tài)服務(wù)云原生化全鏈路實踐,聚焦分布式數(shù)據(jù)庫核心技術(shù)攻堅與開發(fā)運維一體化體系的構(gòu)建。

責(zé)任編輯:武曉燕 來源: dbaplus社群
相關(guān)推薦

2025-05-28 03:10:00

2024-11-21 16:47:55

2023-04-17 08:04:15

Redis性能內(nèi)存

2024-12-02 01:16:53

2024-11-26 08:09:58

2024-05-23 07:59:42

RedisKey性能

2022-04-12 14:54:52

Rediskey

2018-03-19 15:26:23

數(shù)據(jù)庫Redis中間件

2022-02-19 22:02:21

Redisvalue元素

2016-02-15 10:57:39

SaaSSaaS運營SaaS服務(wù)

2021-09-26 09:16:45

RedisGeo 類型數(shù)據(jù)類型

2015-12-14 15:34:35

開源投資創(chuàng)業(yè)

2024-08-07 08:28:38

SpringHabernateJPA

2025-11-13 08:22:03

2019-08-30 08:33:59

Redis緩存高可用性

2024-07-01 08:04:38

2011-11-22 13:22:41

谷歌WiFi

2022-11-03 08:56:43

RediskeyBitmap

2011-01-18 13:41:40

運維法則

2018-05-05 09:00:40

生產(chǎn)效率
點贊
收藏

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

日韩国产第一页| 香蕉视频999| 免费黄色在线视频网站| 99精品国产在热久久婷婷| 亚洲国内高清视频| 久久婷婷国产91天堂综合精品| 秋霞a级毛片在线看| 国产精品99久久久久久似苏梦涵 | 亚洲图片在线| 精品无人区乱码1区2区3区在线| 一本久道综合色婷婷五月| 老司机午夜在线视频| 国产成人在线影院| 国产精彩精品视频| 国产免费久久久久| 天海翼精品一区二区三区| 欧美日韩亚洲综合| 日本中文字幕网址| 日本综合在线| 99精品视频在线播放观看| 国产伦精品免费视频| 久久精品视频久久| 91综合网人人| 亚洲美女视频网站| 国产一级免费片| 欧美黄页免费| 91福利国产精品| 丝袜人妻一区二区三区| 欧美激情免费| 久久九九久精品国产免费直播| 91国产在线免费观看| 国产一级片av| 亚洲精品综合| 欧美激情视频播放| 成年人二级毛片| 国产剧情一区| 日韩一级电影| 久久亚洲私人国产精品va媚药| 成人在线中文字幕| 中文av免费观看| 亚洲一区区二区| 欧美大片欧美激情性色a∨久久| 91精品久久久久久久久久久久| 欧美日日夜夜| 亚洲成人中文字幕| 四虎永久免费观看| 亚洲国产欧美在线观看| 7777女厕盗摄久久久| 欧美美女一级片| 成人在线视频免费| 在线亚洲高清视频| 久久综合伊人77777麻豆最新章节| 蜜桃视频www网站在线观看| 一区二区三区四区乱视频| 国产在线无码精品| av网站免费在线观看| 日韩毛片视频在线看| 色乱码一区二区三区熟女 | 99精品美女视频在线观看热舞| 91成人免费电影| 玩弄japan白嫩少妇hd| 欧美羞羞视频| 欧美亚洲国产怡红院影院| 看欧美ab黄色大片视频免费| 国产精品毛片久久久久久久久久99999999| 一本到不卡免费一区二区| 成人羞羞国产免费网站| 国产经典一区| 欧美精品免费视频| 毛片毛片毛片毛片毛| 精品国产鲁一鲁****| 日韩欧美国产三级电影视频| 中文在线字幕观看| 欧洲亚洲一区二区三区| 亚洲系列中文字幕| 九九热久久免费视频| 91偷拍一区二区三区精品| 久久久成人av| 国产精品1000| 欧美亚洲一级| 国产一区红桃视频| 亚洲精品国产精品国| 97久久精品人人澡人人爽| 欧美日韩一区在线视频| 美女免费久久| 香蕉加勒比综合久久| 日本在线视频www| 羞羞视频在线观看一区二区| 欧美成人一区二区三区| 久久人人爽人人爽人人片| 成人羞羞视频在线看网址| 欧美成人精品一区二区三区| 日本特黄特色aaa大片免费| 久久中文在线| 999热视频在线观看| 天天摸天天碰天天爽天天弄| 欧美国产一区在线| 99久久久精品视频| 国产一区二区主播在线| 日韩欧美国产电影| 中文字幕第20页| 欧美88av| 国产精品欧美日韩久久| 亚洲伦理在线观看| 中文字幕精品—区二区四季| 成人国产在线看| 国产精品久久亚洲不卡| 精品捆绑美女sm三区| 中文字幕网站在线观看| 国模吧视频一区| 国产精品日韩在线观看| 神马午夜在线观看| 亚洲日本成人在线观看| 50路60路老熟妇啪啪| 日韩区欧美区| 中文字幕亚洲一区| 四虎精品永久在线| 国产一区二区不卡| 亚洲7777| 性欧美gay| 亚洲国产天堂网精品网站| 久久噜噜色综合一区二区| 亚洲一区欧美二区| 国产一区二区三区四区hd| 高清免费电影在线观看| 在线视频国内一区二区| 中文字幕一区二区人妻在线不卡| 欧美1级日本1级| 成人一区二区电影| 在线免费观看黄色网址| 色呦呦国产精品| 亚洲精品女人久久久| 亚洲私拍自拍| 国产精品18毛片一区二区| 黄色网址在线免费播放| 欧美性猛交xxxxxx富婆| 少妇久久久久久久久久| 五月天免费网站| 亚洲免费毛片| 久久人人爽人人爽人人片av高清| 国产免费一区二区三区免费视频| 欧美国产精品一区二区三区| 日韩视频在线视频| 国产精品chinese在线观看| 久久网福利资源网站| 一级特黄aa大片| 国产精品久久久久久久久动漫| 男人亚洲天堂网| 亚洲免费专区| 国产精品久久久久国产a级| 国产经典自拍视频在线观看| 色香蕉成人二区免费| www.久久av| 乱人伦中文视频在线| 国产suv精品一区二区三区88区| 国产精品99re| 成人99免费视频| 国产69精品久久久久久久| 91综合精品国产丝袜长腿久久| 不卡av在线播放| 国产模特av私拍大尺度 | 精品免费视频123区| 97人人在线视频| 日韩精品高清视频| 无码一区二区三区| 亚洲国产精品成人久久综合一区| 亚洲精品视频导航| 偷偷www综合久久久久久久| 91亚洲精华国产精华| 欧美videossex另类| 亚洲精品97久久| 69视频免费看| 中文字幕在线不卡一区| 日本高清免费在线视频| 黄色成人精品网站| 欧美精品亚洲精品| 成人国产综合| 九九久久国产精品| 午夜性色福利影院| 欧美亚洲丝袜传媒另类| 黄色录像免费观看| 成人高清视频免费观看| 熟女少妇精品一区二区| 97精品国产一区二区三区 | 日本午夜精品| 国产精品免费看久久久香蕉| 调教一区二区| 亚洲欧美国产一本综合首页| 在线免费观看一区二区| 亚洲一区二区影院| 亚洲の无码国产の无码步美| 日产国产欧美视频一区精品| 今天免费高清在线观看国语| 日韩激情啪啪| 91亚洲精品久久久| 鲁鲁在线中文| 久久久精品一区二区| xxxwww在线观看| 在线亚洲免费视频| 精品一区二区三区四| 久久久久久久网| 中文字幕一二三区| 日韩专区欧美专区| 精品国偷自产一区二区三区| 精品国产一区二区三区四区| 亚洲xxxx在线| 成人国产综合| 午夜精品一区二区三区在线| 久久久久久国产精品免费无遮挡| 亚洲精品小视频| 亚洲第一大网站| 欧美色涩在线第一页| 国产精品500部| 亚洲美女视频在线| 亚洲熟女少妇一区二区| 97se亚洲国产综合自在线不卡| 天堂在线一区二区三区| 美日韩精品视频| 日韩a级在线观看| 国产精品久久久久一区二区三区厕所| 久久精品午夜一区二区福利| 亚洲一区二区免费在线观看| 国产精品自产拍在线观看中文| а√在线中文在线新版| 另类美女黄大片| 免费黄网在线观看| 中日韩美女免费视频网站在线观看 | 成人av黄色| 正在播放欧美一区| 国产九色在线| 亚洲美女喷白浆| 天堂网www中文在线| 精品国内二区三区| va视频在线观看| 欧美精品三级在线观看| 亚洲免费视频二区| 欧洲av在线精品| 中文字幕在线观看视频免费| 精品久久在线播放| 日韩少妇裸体做爰视频| 亚洲成人一区二区在线观看| 青青青在线视频| 一区二区日韩av| 国产真实的和子乱拍在线观看| 亚洲一区二区三区在线看| 三级影片在线看| 伊人夜夜躁av伊人久久| 欧美国产日韩综合| 一区二区三区小说| 国产精品九九九九九九| 亚洲美女视频在线| 精品无码人妻一区二区三区| 亚洲一区二区视频在线观看| 精品一区在线视频| 五月天视频一区| 麻豆久久久久久久久久| 欧美视频二区36p| 丁香社区五月天| 欧美视频在线一区| 亚洲午夜精品久久久| 91精品综合久久久久久| 国产视频在线观看免费| 精品免费一区二区三区| 色婷婷在线视频| 精品在线小视频| 第一福利在线| 久久久成人精品| 色呦呦在线观看视频| 亚州欧美日韩中文视频| 九色porny丨入口在线| 日韩av手机在线| 热久久久久久| 成人免费在线一区二区三区| 国产精品调教视频| 欧洲亚洲一区| 天天色天天射综合网| 成人精品视频在线播放| 久久精品亚洲一区二区| 波多野结衣xxxx| 国产成人在线电影| 97超碰在线免费观看| 一区在线中文字幕| 九九九国产视频| 91高清视频在线| а√天堂资源在线| 亚洲一区二区福利| 午夜av在线播放| 国产成+人+综合+亚洲欧洲| 图片一区二区| 精品无人区一区二区三区竹菊| 波多野结衣的一区二区三区| 18视频在线观看娇喘| 国产乱码精品| 国产精品中文久久久久久| 91一区在线观看| 四虎884aa成人精品| 欧美午夜片在线免费观看 | 亚洲成av人片在线观看香蕉| 国产在线视频网站| 欧美极品少妇xxxxⅹ喷水| 丝袜美腿一区| 国产精品久久亚洲| 日韩不卡一区| 91国视频在线| 国产美女av一区二区三区| 新91视频在线观看| 亚洲一区免费在线观看| 亚洲性在线观看| 日韩国产精品视频| 色呦呦在线观看视频| 国产精品流白浆视频| 国产精品极品| 久久久成人精品一区二区三区 | 一区二区三区欧美精品| 99久久er热在这里只有精品66| 国产老头老太做爰视频| 日韩欧美在线视频观看| 亚洲精品久久久久久久久久| 视频在线一区二区| 日韩欧美一区二区三区免费观看| av蓝导航精品导航| 91麻豆国产自产在线观看亚洲 | 97久久香蕉国产线看观看| 国产精品v欧美精品v日韩精品 | 欧美成人三级在线视频| 精品一区二区三区日韩| 国产三级av在线播放 | 在线不卡免费视频| 亚洲欧美制服丝袜| 午夜影院一区| 国产一区喷水| 激情综合电影网| 久久国产免费视频| 亚洲女爱视频在线| 一区二区精品视频在线观看| 国产亚洲福利一区| 免费亚洲电影| 欧洲成人一区二区| 亚洲欧美网站| 亚洲精品视频大全| 精品美女国产在线| 在线观看xxx| 69av在线视频| 偷拍一区二区| 一女被多男玩喷潮视频| 91在线小视频| √资源天堂中文在线| 国产手机视频精品| 午夜精品成人av| 亚洲精品日韩在线观看| 日本中文字幕一区二区有限公司| www..com.cn蕾丝视频在线观看免费版| 色哟哟欧美精品| 激情小视频在线| 国产精品免费网站| 99久久www免费| 狠狠干狠狠操视频| 亚洲精品国产品国语在线app| a视频免费在线观看| 欧美黑人一级爽快片淫片高清| 视频精品一区| 青娱乐自拍偷拍| 国产偷国产偷亚洲高清人白洁| 婷婷激情五月综合| 最近中文字幕2019免费| 99精品美女视频在线观看热舞| 国产91porn| 99r国产精品| 亚洲精品国产欧美在线观看| 中文字幕一区电影| 欧美二区观看| 蜜桃传媒一区二区三区| 久久天堂av综合合色蜜桃网| 中文字幕观看视频| 久久天堂电影网| 国语一区二区三区| aaaaaa亚洲| 国产精品久久久久久久久晋中| 国内精品久久久久久久久久 | 五月天在线免费视频| 东方欧美亚洲色图在线| 国产日产精品一区二区三区| 一区二区三区四区精品| 午夜视频在线观看精品中文| 精品中文字幕av| 日韩毛片一二三区| 日本成人一区二区三区| 91精品久久久久久久久久| 在线看片一区| 国产精品av久久久久久无| 5月丁香婷婷综合| 白浆在线视频| 亚洲一区二区三区乱码| 成人免费毛片aaaaa**| 亚洲性猛交富婆| 国模私拍视频一区| 日韩国产专区| 制服丝袜第二页| 欧美精品日韩精品| 电影网一区二区|