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

Redis事件驅動(aeEventLoop)原理分析

數據庫 Redis
Redis作為Server服務端在啟動之后隨時隨刻監聽著相關事件的發生。以linux為例,其處理過程與基于epoll的i/o多路復用偽代碼框架基本相似,Redis源碼中更多的是通過封裝使其得到一個方便使用的庫,庫的底層包含了多種i/o多路復用實現方式。

關于Redis事件驅動

眾所周知,Redis是高性能的、基于內存的、k-v數據庫。其強大的功能背后,存在著2種不同類型的事件驅動,包括:

  1. 文件事件(File event)
  2. 時間事件(Time event)

文件事件是對相關的 fd 相關操作的封裝,時間事件則是對定時任務相關操作的封裝。Redis server通過文件事件來進行外部請求的處理與操作,通過時間事件來對系統內部產生的定時任務進行處理。(本文重點講解文件事件相關的操作流程以及原理)

文中探討的原理及源碼基于Redis官方 v7.0 版本

Redis事件驅動的相關源碼

在Redis源碼中,涉及事件驅動相關的源碼文件主要有以下幾個(以ae作為文件名稱前綴):

src
├── ae.c  
├── ae.h
├── ae_epoll.c
├── ae_evport.c
├── ae_kqueue.c
└── ae_select.c
  • ae.c 文件事件驅動/時間事件驅動的核心處理邏輯
  • ae.h文件事件驅動/時間事件驅動結構體、方法簽名的定義
  • ae_epoll.c linux os 文件事件驅動涉及的i/o多路復用實現
  • ae_evport.c sun os 文件事件驅動涉及的i/o多路復用實現
  • ae_kqueue.c mac/BSD os 文件事件驅動涉及的os i/o多路復用實現
  • ae_select.c 其他 os 文件事件驅動涉及的i/o多路復用實現(或者說是通用型的,包括Windows)

根據源碼中注釋(ae.c)可知 ae 的含義為 A simple event-driven。

/* A simple event-driven programming library. Originally I wrote this code
 * for the Jim's event-loop (Jim is a Tcl interpreter) but later translated
 * it in form of a library for easy reuse.
 */

一個簡單的事件驅動編程庫。最初我(作者:antirez)為Jim的事件循環(Jim是Tcl解釋器)編寫了這段代碼,但后來將其轉化為庫形式以便于重用。

多種i/o多路復用方法的選擇

在Redis源碼中存在多種i/o多路復用實現方式,如何選擇使用哪種i/o多路復用實現呢?源碼編譯時選擇不同的實現方式,即:Redis源碼編譯成二進制文件的時候來選擇對應的實現方式,在源碼可以看到蛛絲馬跡。

代碼文件: ae.c

#ifdef HAVE_EVPORT
#include "ae_evport.c"
#else
    #ifdef HAVE_EPOLL
    #include "ae_epoll.c"
    #else
        #ifdef HAVE_KQUEUE
        #include "ae_kqueue.c"
        #else
        #include "ae_select.c"
        #endif
    #endif
#endif

從上面代碼可知,在編譯源碼的預處理階段,根據不同的編譯條件(#ifdef/#else/#endif)來判斷對應的宏是否定義(#define定義的常量)來加載實現邏輯。以epoll為例,若定義了 HAVE_EPOLL 宏,則加載 "ae_epoll.c" 文件。宏 "HAVE_EVPORT/HAVE_EPOLL/HAVE_KQUEUE" 分別對應不同的系統(或者說是對應的編譯器)。

代碼文件: config.h

#ifdef __sun
#include <sys/feature_tests.h>
#ifdef _DTRACE_VERSION
#define HAVE_EVPORT 1
#define HAVE_PSINFO 1
#endif
#endif

#ifdef __linux__
#define HAVE_EPOLL 1
#endif

#if (defined(__APPLE__) && defined(MAC_OS_X_VERSION_10_6)) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined (__NetBSD__)
#define HAVE_KQUEUE 1
#endif

假設,當前是linux系統,那么 宏__linux__ 又是從哪里來的呢?Linux環境下主要用gcc編譯,借助 gcc -dM -E - < /dev/null 命令從獲得相應的變量中可以看到其定義。

root@ivansli ~# gcc -dM -E - < /dev/null | grep __linux
#define __linux 1
#define __linux__ 1

即:Redis源碼會根據編譯器來判斷應該把源碼編譯成對應平臺(或者是通用平臺,性能會有所下降)運行的二進制可執行程序。

核心結構體 aeEventLoop

aeEventLoop 結構體如下所示:

/* State of an event based program 事件驅動程序的狀態 */
typedefstruct aeEventLoop {
    int maxfd;   /* highest file descriptor currently registered. 當前已注冊的最高文件描述符 */
    int setsize; /* max number of file descriptors tracked. [events/fired數組的大小] */
    longlong timeEventNextId; /* 時間事件的下一個ID */

    /* events/fired 都是數組 */
    /* events 數組,下標含義:為某個fd。fd=>aeFileEvent,即 文件描述符=>文件事件 */
    /* fired 為 io多路復用返回的數組,每一個值為就緒的fd */
    /* 通過 fired 中的 fd 去 events 查找對應的事件信息(事件信息包含conn) */
    aeFileEvent *events; /* Registered events 已注冊事件,數組 */
    aeFiredEvent *fired; /* Fired events 觸發的事件,數組 */

    aeTimeEvent *timeEventHead; /* 時間事件,鏈表 */
    int stop; /* 停止事件循環 */
    void *apidata; /* This is used for polling API specific data. 這用于獲取特定的API數據,aeApiState *state 包含io多路復用fd等字段 */

    aeBeforeSleepProc *beforesleep;
    aeBeforeSleepProc *aftersleep;

    int flags;
} aeEventLoop;

aeEventLoop 結構體核心字段以及相關交互如下圖所示:

  • setsize 文件事件數組大小,等于 server.maxclients+CONFIG_FDSET_INCR
  • events 文件事件數組,大小等于setsize
  • fired 文件事件就緒的fd數組,大小等于setsize
  • timeEventHead 時間事件數組,雙向鏈表
  • apidata 這用于獲取特定的API數據,指向 aeApiState結構體,不同的i/o多路復用實現包含不同的字段。
// ae_epoll.c
typedefstruct aeApiState {/* 在 aeApiCreate 中初始化,linux則在 ae_linux.c 文件 */
    int epfd; /* io多路復用fd */
    struct epoll_event *events;/* 就緒的事件數組  */
} aeApiState;

// ae_kqueue.c
typedefstruct aeApiState {
    int kqfd;
    struct kevent *events;

    /* Events mask for merge read and write event.
     * To reduce memory consumption, we use 2 bits to store the mask
     * of an event, so that 1 byte will store the mask of 4 events. */
    char *eventsMask; 
} aeApiState;

// ae_evport.c
typedefstruct aeApiState {
    int     portfd;                             /* event port */
    uint_t  npending;                           /* # of pending fds */
    int     pending_fds[MAX_EVENT_BATCHSZ];     /* pending fds */
    int     pending_masks[MAX_EVENT_BATCHSZ];   /* pending fds' masks */
} aeApiState;

// ae_select.c
typedefstruct aeApiState {
    fd_set rfds, wfds;
    /* We need to have a copy of the fd sets as it's not safe to reuse
     * FD sets after select(). */
    fd_set _rfds, _wfds;
} aeApiState;

圖片

aeEventLoop 相關操作方法簽名如下所示(文件ae.h):

aeEventLoop *aeCreateEventLoop(int setsize);
void aeDeleteEventLoop(aeEventLoop *eventLoop);
void aeStop(aeEventLoop *eventLoop);

int aeCreateFileEvent(aeEventLoop *eventLoop, int fd, int mask, aeFileProc *proc, void *clientData);
void aeDeleteFileEvent(aeEventLoop *eventLoop, int fd, int mask);
int aeGetFileEvents(aeEventLoop *eventLoop, int fd);
void *aeGetFileClientData(aeEventLoop *eventLoop, int fd);

long long aeCreateTimeEvent(aeEventLoop *eventLoop, long long milliseconds,
        aeTimeProc *proc, void *clientData, aeEventFinalizerProc *finalizerProc);
int aeDeleteTimeEvent(aeEventLoop *eventLoop, long long id);

int aeProcessEvents(aeEventLoop *eventLoop, int flags);
int aeWait(int fd, int mask, long long milliseconds);

void aeMain(aeEventLoop *eventLoop);

char *aeGetApiName(void);

void aeSetBeforeSleepProc(aeEventLoop *eventLoop, aeBeforeSleepProc *beforesleep);
void aeSetAfterSleepProc(aeEventLoop *eventLoop, aeBeforeSleepProc *aftersleep);

int aeGetSetSize(aeEventLoop *eventLoop);
int aeResizeSetSize(aeEventLoop *eventLoop, int setsize);
void aeSetDontWait(aeEventLoop *eventLoop, int noWait);

aeEventLoop事件處理核心方法

用途

調用i/o多路復用方法

epoll為例,調用方法

aeCreateEventLoop

創建并初始化事件循環

aeApiCreate

epoll_create()

默認水平觸發

aeDeleteEventLoop

刪除事件循環

aeApiFree

-

aeCreateFileEvent

創建文件事件

aeApiAddEvent

epoll_ctl()

EPOLL_CTL_ADD

EPOLL_CTL_MOD

aeDeleteFileEvent

刪除文件事件

aeApiDelEvent

epoll_ctl()

EPOLL_CTL_MOD

EPOLL_CTL_DEL

aeProcessEvents

處理文件事件

aeApiPoll

epoll_wait()

aeGetApiName

獲取i/o多路復用的實現名稱

aeApiName

-

基于epoll的i/o多路復用

客戶端與服務端的連接建立過程,如下圖所示:

圖片

TCP三次握手時,Linux內核會維護兩個隊列:

  1. 半連接隊列,被稱為SYN隊列
  2. 全連接隊列,被稱為 accept隊列

epoll相關處理方法與邏輯如下圖所示:

圖片

基于epoll的i/o多路復用偽代碼框架:

int main(){
    lfd = socket(AF_INET,SOCK_STREAM,0); // 創建socket
    bind(lfd, ...); // 綁定IP地址與端口
    listen(lfd, ...); // 監聽
 
    // 創建epoll對象
    efd = epoll_create(...);
    // 把 listen socket 的事件管理起來
    epoll_ctl(efd, EPOLL_CTL_ADD, lfd, ...);
 
    //事件循環
    for (;;) {
        size_t nready = epoll_wait(efd, ep, ...);
  
        for (int i = 0; i < nready; ++i){
            if(ep[i].data.fd == lfd){
                fd = accept(listenfd, ...); //lfd上發生事件表示都連接到達,accept接收它
                epoll_ctl(efd, EPOLL_CTL_ADD, fd, ...);
            }else{
                //其它socket發生的事件都是讀寫請求、或者關閉連接
                ...
            }
        }
    }
}

圖片

從上可知,Redis作為Server服務端在啟動之后隨時隨刻監聽著相關事件的發生。以linux為例,其處理過程與基于epoll的i/o多路復用偽代碼框架基本相似,Redis源碼中更多的是通過封裝使其得到一個方便使用的庫,庫的底層包含了多種i/o多路復用實現方式。

aeEventLoop 的執行過程

以epoll為例,簡化版的Redis事件驅動交互過程。

圖片

圖中僅列出了核心方法,如有錯誤歡迎指正

Red括: 針對不同的 fd 注冊 AE_READABLE/AE_WRITABLE 類型的回調方法,同時把 fd 添加到 epoll 中。當 fd 關心的事件觸發之后,執行對應回調方法(主要針對 可讀/可寫/時間事件 3種類型的事件進行處理)。Redis 中 epoll 使用的觸發方式為 LT 水平觸發,意味著數據一次性沒有處理完,下次 epoll_wait() 方法還會返回對應fd,直到處理完畢,對于客戶端一次性發起批量處理多條命令的操作非常有益,減少對其他指令的阻塞時間。

責任編輯:武曉燕 來源: 編程技術之道
相關推薦

2017-06-12 10:31:17

Redis源碼學習事件驅動

2023-02-07 07:25:36

Spring事件驅動

2019-04-19 21:06:23

事件驅動架構VANTIQ

2023-06-10 23:09:40

Redis場景內存

2024-04-11 11:04:05

Redis

2025-06-05 08:00:00

Go事件驅動系統編程

2009-06-25 14:05:08

Ajax JSF

2023-07-12 08:30:52

服務架構事件驅動架構

2025-07-09 00:37:30

2025-01-16 14:03:35

Redis

2023-12-13 10:44:57

事件驅動事件溯源架構

2013-03-20 10:19:17

RedisRedis-senti監控

2022-07-01 08:02:30

QQ掃碼登錄

2009-10-20 14:58:15

Javascript事

2023-10-12 22:44:16

iOS事件響應鏈

2023-10-26 07:13:14

Redis內存淘汰

2020-10-22 10:58:23

Ryuk 勒索

2009-08-12 18:20:39

C#事件驅動程序

2024-05-13 08:40:02

Go事件驅動編程

2024-06-28 10:19:02

委托事件C#
點贊
收藏

51CTO技術棧公眾號

一级片在线观看免费| 亚洲精品女人久久久| 国产精品一区二区三区视频网站| 国内欧美视频一区二区| 久久久免费在线观看| 亚洲第一成人网站| 亚洲网站免费| 精品久久香蕉国产线看观看gif| 欧美日韩一区二区视频在线观看| 91超薄丝袜肉丝一区二区| 韩国在线视频一区| 日韩精品在线第一页| 亚洲国产成人va在线观看麻豆| 色屁屁www国产馆在线观看| wwwwxxxxx欧美| 国产欧美一区二区三区久久| 国产精品suv一区二区| 成人黄色小视频| 亚洲高清福利视频| 伊人五月天婷婷| 美女一区网站| 亚洲一区二区偷拍精品| 亚洲一区二区在| 日韩大胆人体| 成人性视频网站| 91九色国产视频| 黄色一级视频免费看| 国产一在线精品一区在线观看| 一区二区亚洲欧洲国产日韩| 国产麻豆剧传媒精品国产av| 精品中文在线| 欧美日韩电影在线| 欧美黑人又粗又大又爽免费| 99re6在线精品视频免费播放| 中文字幕一区二区三中文字幕| 久久久久久99| 手机看片1024国产| 国产精品一二三四| 91精品久久久久久久久青青| 波多野结衣日韩| 亚洲欧美日韩一区在线观看| 久久久久久91香蕉国产| 潘金莲一级黄色片| 成人在线丰满少妇av| 亚洲人成电影网站色www| 大尺度做爰床戏呻吟舒畅| 亚洲精品视频一二三区| 日韩丝袜美女视频| 日韩精品――色哟哟| 亚洲一区二区三区久久久| 精品视频1区2区| 中文字幕在线综合| 久久夜夜久久| 欧美精品三级日韩久久| 亚洲精品www.| 日本在线一区二区| 9191成人精品久久| 超碰中文字幕在线观看| 欧美一级片网址| 欧美一区二区性放荡片| 国产精品探花在线播放| 蜜桃在线一区| 精品国产亚洲一区二区三区在线观看| 人妻激情偷乱视频一区二区三区| 一区二区三区免费在线看| 日韩你懂的在线观看| 国产情侣久久久久aⅴ免费| 91久久偷偷做嫩草影院电| 精品福利二区三区| 偷拍女澡堂一区二区三区| 影视先锋久久| 在线观看国产精品91| 欧美一级特黄高清视频| 亚洲国产精品久久久久蝴蝶传媒| 九九热r在线视频精品| 国产精品suv一区二区| 性伦欧美刺激片在线观看| 国产成人精品一区二区在线| 在线观看国产黄| 国产精品系列在线观看| 国产精品一区二| 欧美女子与性| 日韩一区中文字幕| 欧美精品久久久久久久自慰| 欧美亚洲韩国| 91精品福利在线一区二区三区 | 免费看黄色的视频| 色综合天天综合网中文字幕| 欧美成人三级视频网站| www成人在线| 久久9热精品视频| 国产精品香蕉视屏| 91网在线播放| 亚洲成在线观看| 亚洲欧美自拍另类日韩| 丁香婷婷成人| 日韩中文在线不卡| 日本一区二区三区免费视频| 美女在线观看视频一区二区| 岛国一区二区三区高清视频| 丁香婷婷在线| 亚洲国产精品自拍| 久久久久久久久久久久91| 白嫩白嫩国产精品| 色悠悠国产精品| 久久一区二区三区视频| 国产在线乱码一区二区三区| 欧美二级三级| av在线网页| 色呦呦国产精品| 中文字幕天堂av| 欧美激情理论| 欧美怡红院视频一区二区三区| 一区二区精品视频在线观看| 久久综合999| 久久亚洲国产成人精品无码区| 日本在线中文字幕一区二区三区| 精品精品欲导航| 欧美做爰啪啪xxxⅹ性| 久久久久久自在自线| 国产一区二区黄色| www.在线视频| 欧美日韩免费高清一区色橹橹 | 日本成人小视频| 91av在线视频观看| 亚洲精品久久久狠狠狠爱| 国产精品二三区| 不卡av免费在线| 自拍视频一区| 国产91成人video| 丰满人妻妇伦又伦精品国产| 亚洲欧美经典视频| 久久黄色片网站| 成人黄色小视频| 青青久久aⅴ北条麻妃| 日韩一级片免费观看| 依依成人综合视频| 污污视频在线免费| 五月精品视频| 成人激情电影一区二区| 91大神在线网站| 精品视频色一区| 老司机精品免费视频| 日韩成人av影视| 欧美连裤袜在线视频| 欧美亚洲日本精品| 亚洲精品久久7777777| 永久免费看片在线播放| av亚洲精华国产精华| 成人性生活视频免费看| xxxx日韩| 欧美中文字幕视频在线观看| 青梅竹马是消防员在线| 色婷婷久久久亚洲一区二区三区| japanese中文字幕| 日韩电影一区二区三区| 神马欧美一区二区| 日韩毛片免费看| 久久久97精品| 亚洲h视频在线观看| 亚洲国产日日夜夜| 性久久久久久久久久久| 久久久久综合| 亚洲日本一区二区三区在线不卡| 日本免费一区二区三区等视频| 久久亚洲精品网站| 精品国产av一区二区| 亚洲一区二区在线观看视频| 中国一级特黄录像播放| 天堂成人免费av电影一区| 性欧美videosex高清少妇| 日韩黄色在线| 欧美黑人性视频| 极品白浆推特女神在线观看| 欧美日韩国产一级片| 久久久久久久久毛片| 不卡视频一二三四| 北条麻妃视频在线| 91精品啪在线观看国产18| 成人3d动漫一区二区三区91| 看黄在线观看| 中文字幕亚洲综合久久筱田步美 | 精品一二三四区| 成人在线播放网址| 欧美裸体在线版观看完整版| 91情侣偷在线精品国产| 美女视频在线免费| 色噜噜狠狠狠综合曰曰曰88av| 国内精品偷拍视频| 欧美视频一区二区三区…| 成人信息集中地| 成人毛片在线观看| a在线观看免费视频| 在线欧美福利| 亚洲一区二区在线观| 国产成人夜色高潮福利影视| 国产成人综合一区二区三区| 18videosex性欧美麻豆| 亚洲欧美变态国产另类| 国产又粗又长又黄| 狠狠躁夜夜躁人人躁婷婷91 | 亚洲电影中文字幕在线观看| 国产又黄又粗视频| 成人美女视频在线看| www.cao超碰| 麻豆成人在线| 日本精品久久久久久久久久| 欧美日韩激情| 国产视频一区二区三区四区| 香蕉久久一区| 国产不卡av在线| 国产高清在线a视频大全| 一本一本久久a久久精品牛牛影视| www.欧美国产| 欧美高清www午色夜在线视频| 亚洲另类欧美日韩| 亚洲午夜国产一区99re久久| 蜜桃av.com| 久久久久久久久久久久久久久99 | 白嫩少妇丰满一区二区| 欧美午夜不卡| 懂色av一区二区三区四区五区| 亚洲永久精品唐人导航网址| 好吊色欧美一区二区三区| av国产精品| 国产精品视频在线观看| 羞羞影院欧美| 欧洲美女7788成人免费视频| av老司机在线观看| 欧美国产日韩一区二区在线观看| 91看片在线观看| 国产亚洲欧美视频| 天天色综合久久| 亚洲国产日韩欧美在线动漫| 亚洲成人久久精品| 欧美不卡在线视频| 午夜老司机福利| 日韩视频在线永久播放| 国产视频www| 7777精品伊人久久久大香线蕉的| 91精品国产乱码久久久| 欧美日韩一区二区三区不卡| 国产精品sm调教免费专区| 色噜噜狠狠色综合欧洲selulu| xxxx.国产| 一本高清dvd不卡在线观看| 久久午夜免费视频| 欧美丝袜一区二区三区| 黄色片中文字幕| 色婷婷综合久久久中文字幕| 三级网站在线播放| 色激情天天射综合网| 国产免费一级视频| 欧美色图12p| 一区二区三区免费观看视频| 91精品免费观看| 亚洲爆乳无码一区二区三区| 亚洲成人xxx| 深夜福利视频在线观看| 亚洲人永久免费| 日本三级视频在线播放| 久久福利视频网| 国产丝袜在线播放| 欧洲成人免费aa| 韩国精品视频在线观看| 91免费福利视频| 国产精品x8x8一区二区| 鲁片一区二区三区| 日韩在线视频精品| 影音先锋成人资源网站| 狠狠干综合网| 日本三级免费观看| 美女国产一区二区三区| 污免费在线观看| 99久久精品情趣| 97在线观看免费视频| 亚洲免费电影在线| 99久在线精品99re8热| 欧美亚洲动漫制服丝袜| 国产丰满果冻videossex| 亚洲精品720p| 3p视频在线观看| 欧美国产日产韩国视频| 国产精品亚洲一区二区三区在线观看 | 一区二区免费电影| 亚洲小说欧美另类婷婷| 国产成人a亚洲精v品无码| 麻豆国产一区二区| 免费黄色a级片| 国产视频一区不卡| 精品97人妻无码中文永久在线| 欧美性猛xxx| 国产精品主播一区二区| 亚洲精品福利资源站| 欧美激情免费| 欧美一性一乱一交一视频| 精品一区二区三区中文字幕在线| 欧美日韩一区二区视频在线观看| 欧美国产三区| 手机在线看福利| av一区二区不卡| 国产黄a三级三级| 日本韩国欧美一区| 成人午夜福利视频| www.99久久热国产日韩欧美.com| 男人av在线播放| 成人av免费在线看| 欧美国产偷国产精品三区| 黄色片一级视频| 成人av片在线观看| 超碰手机在线观看| 欧美日韩在线直播| 色吊丝在线永久观看最新版本| 九色精品美女在线| 亚洲日本中文| 色狠狠久久av五月综合|| 国产日韩欧美一区二区三区在线观看 | 97成人资源站| 在线观看一区二区精品视频| 手机av在线免费观看| 欧美激情精品久久久久久免费印度| 国产成人福利夜色影视| 欧美久久综合性欧美| 国产欧美午夜| 日韩www视频| 亚洲国产综合视频在线观看| 国产毛片毛片毛片毛片| 中文字幕欧美在线| 欧美xxxx做受欧美护士| 日韩精品一区二区三区在线播放| 久久91精品国产91久久久| 国产高清免费在线播放| 97av在线影院| 国产图片一区| 全黄性性激高免费视频| 国产·精品毛片| 青娱乐国产盛宴| 日韩欧美高清一区| a毛片在线播放| 91影院在线免费观看视频| 91青青国产在线观看精品| 欧美日韩一区二区三区69堂| 国产日韩av一区| 波多野结衣人妻| 中文字幕亚洲欧美| 色婷婷成人网| 欧美xxxx吸乳| 国产成人午夜视频| 懂色av.com| 亚洲精品国产免费| 亚洲黄色网址| 日本欧美精品久久久| 日韩av在线发布| 免费看一级黄色| 91精品欧美一区二区三区综合在 | 久久亚洲道色| 少妇高潮喷水久久久久久久久久| 久久久综合视频| 怡红院男人天堂| 久久成人18免费网站| 91精品久久久久久综合五月天| www.九色.com| www国产精品av| 91在线视频国产| 欧美精品福利在线| 日韩影视在线观看| www.99av.com| 亚洲精品水蜜桃| 香蕉人妻av久久久久天天| 国产精品va在线播放我和闺蜜| 欧美日韩激情在线一区二区三区| 亚洲第一色av| 午夜激情一区二区| 成人免费视频| 97在线中文字幕| 亚洲一卡久久| 亚洲人与黑人屁股眼交| 亚洲国产精品热久久| 国产一区一一区高清不卡| 日日噜噜夜夜狠狠久久丁香五月| 成人a区在线观看| 欧美视频xxxx| 欧美富婆性猛交| 国产欧美日韩精品高清二区综合区| 久久这里只精品| 亚洲成在人线在线播放| av中文资源在线| 国产91精品一区二区绿帽| 性久久久久久| 欧美精品久久久久性色| 亚洲午夜精品久久久久久性色| 精品麻豆剧传媒av国产九九九| 欧美爱爱视频免费看| 国产精品久久久久久久久快鸭 | 日韩视频在线免费| 极品束缚调教一区二区网站| 鲁一鲁一鲁一鲁一av| 精品久久久久久久久久国产| 麻豆影视在线观看_| 蜜桃传媒一区二区|