成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > Redis中事件驅(qū)動(dòng)模型示例詳解

Redis中事件驅(qū)動(dòng)模型示例詳解

熱門標(biāo)簽:太原營(yíng)銷外呼系統(tǒng) 最簡(jiǎn)單的百度地圖標(biāo)注 百度商家地圖標(biāo)注怎么做 西藏教育智能外呼系統(tǒng)價(jià)格 玄武湖地圖標(biāo)注 小紅書怎么地圖標(biāo)注店 竹間科技AI電銷機(jī)器人 地圖標(biāo)注費(fèi)用 地圖標(biāo)注如何即時(shí)生效

前言

Redis 是一個(gè)事件驅(qū)動(dòng)的內(nèi)存數(shù)據(jù)庫(kù),服務(wù)器需要處理兩種類型的事件。

  • 文件事件
  • 時(shí)間事件

下面就會(huì)介紹這兩種事件的實(shí)現(xiàn)原理。

文件事件

Redis 服務(wù)器通過(guò) socket 實(shí)現(xiàn)與客戶端(或其他redis服務(wù)器)的交互,文件事件就是服務(wù)器對(duì) socket 操作的抽象。 Redis 服務(wù)器,通過(guò)監(jiān)聽這些 socket 產(chǎn)生的文件事件并處理這些事件,實(shí)現(xiàn)對(duì)客戶端調(diào)用的響應(yīng)。

Reactor

Redis 基于 Reactor 模式開發(fā)了自己的事件處理器。

這里就先展開講一講 Reactor 模式。看下圖:

“I/O 多路復(fù)用模塊”會(huì)監(jiān)聽多個(gè) FD ,當(dāng)這些FD產(chǎn)生,accept,read,write 或 close 的文件事件。會(huì)向“文件事件分發(fā)器(dispatcher)”傳送事件。

文件事件分發(fā)器(dispatcher)在收到事件之后,會(huì)根據(jù)事件的類型將事件分發(fā)給對(duì)應(yīng)的 handler。

我們順著圖,從上到下的逐一講解 Redis 是怎么實(shí)現(xiàn)這個(gè) Reactor 模型的。

I/O 多路復(fù)用模塊

Redis 的 I/O 多路復(fù)用模塊,其實(shí)是封裝了操作系統(tǒng)提供的 select,epoll,avport 和 kqueue 這些基礎(chǔ)函數(shù)。向上層提供了一個(gè)統(tǒng)一的接口,屏蔽了底層實(shí)現(xiàn)的細(xì)節(jié)。

一般而言 Redis 都是部署到 Linux 系統(tǒng)上,所以我們就看看使用 Redis 是怎么利用 linux 提供的 epoll 實(shí)現(xiàn)I/O 多路復(fù)用。

首先看看 epoll 提供的三個(gè)方法:

/*
 * 創(chuàng)建一個(gè)epoll的句柄,size用來(lái)告訴內(nèi)核這個(gè)監(jiān)聽的數(shù)目一共有多大
 */
int epoll_create(int size);

/*
 * 可以理解為,增刪改 fd 需要監(jiān)聽的事件
 * epfd 是 epoll_create() 創(chuàng)建的句柄。
 * op 表示 增刪改
 * epoll_event 表示需要監(jiān)聽的事件,Redis 只用到了可讀,可寫,錯(cuò)誤,掛斷 四個(gè)狀態(tài)
 */
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

/*
 * 可以理解為查詢符合條件的事件
 * epfd 是 epoll_create() 創(chuàng)建的句柄。
 * epoll_event 用來(lái)存放從內(nèi)核得到事件的集合
 * maxevents 獲取的最大事件數(shù)
 * timeout 等待超時(shí)時(shí)間
 */
int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);

再看 Redis 對(duì)文件事件,封裝epoll向上提供的接口:

/*
 * 事件狀態(tài)
 */
typedef struct aeApiState {

 // epoll_event 實(shí)例描述符
 int epfd;

 // 事件槽
 struct epoll_event *events;

} aeApiState;

/*
 * 創(chuàng)建一個(gè)新的 epoll 
 */
static int aeApiCreate(aeEventLoop *eventLoop)
/*
 * 調(diào)整事件槽的大小
 */
static int aeApiResize(aeEventLoop *eventLoop, int setsize)
/*
 * 釋放 epoll 實(shí)例和事件槽
 */
static void aeApiFree(aeEventLoop *eventLoop)
/*
 * 關(guān)聯(lián)給定事件到 fd
 */
static int aeApiAddEvent(aeEventLoop *eventLoop, int fd, int mask)
/*
 * 從 fd 中刪除給定事件
 */
static void aeApiDelEvent(aeEventLoop *eventLoop, int fd, int mask)
/*
 * 獲取可執(zhí)行事件
 */
static int aeApiPoll(aeEventLoop *eventLoop, struct timeval *tvp)

所以看看這個(gè)ae_peoll.c 如何對(duì) epoll 進(jìn)行封裝的:

  • aeApiCreate() 是對(duì) epoll.epoll_create() 的封裝。
  • aeApiAddEvent()和aeApiDelEvent() 是對(duì) epoll.epoll_ctl()的封裝。
  • aeApiPoll() 是對(duì) epoll_wait()的封裝。

這樣 Redis 的利用 epoll 實(shí)現(xiàn)的 I/O 復(fù)用器就比較清晰了。

再往上一層次我們需要看看 ea.c 是怎么封裝的?

首先需要關(guān)注的是事件處理器的數(shù)據(jù)結(jié)構(gòu):

typedef struct aeFileEvent {
 // 監(jiān)聽事件類型掩碼,
 // 值可以是 AE_READABLE 或 AE_WRITABLE ,
 // 或者 AE_READABLE | AE_WRITABLE
 int mask; /* one of AE_(READABLE|WRITABLE) */
 // 讀事件處理器
 aeFileProc *rfileProc;
 // 寫事件處理器
 aeFileProc *wfileProc;
 // 多路復(fù)用庫(kù)的私有數(shù)據(jù)
 void *clientData;
} aeFileEvent;

mask 就是可以理解為事件的類型。

除了使用 ae_peoll.c 提供的方法外,ae.c 還增加 “增刪查” 的幾個(gè) API。

  • 增:aeCreateFileEvent
  • 刪:aeDeleteFileEvent
  • 查: 查包括兩個(gè)維度 aeGetFileEvents 獲取某個(gè) fd 的監(jiān)聽類型和aeWait等待某個(gè)fd 直到超時(shí)或者達(dá)到某個(gè)狀態(tài)。

事件分發(fā)器(dispatcher)

Redis 的事件分發(fā)器 ae.c/aeProcessEvents 不但處理文件事件還處理時(shí)間事件,所以這里只貼與文件分發(fā)相關(guān)的出部分代碼,dispather 根據(jù) mask 調(diào)用不同的事件處理器。

//從 epoll 中獲關(guān)注的事件
numevents = aeApiPoll(eventLoop, tvp);
for (j = 0; j  numevents; j++) {
 // 從已就緒數(shù)組中獲取事件
 aeFileEvent *fe = eventLoop->events[eventLoop->fired[j].fd];
 int mask = eventLoop->fired[j].mask;
 int fd = eventLoop->fired[j].fd;
 int rfired = 0;
 // 讀事件
 if (fe->mask  mask  AE_READABLE) {
  // rfired 確保讀/寫事件只能執(zhí)行其中一個(gè)
  rfired = 1;
  fe->rfileProc(eventLoop,fd,fe->clientData,mask);
 }
 // 寫事件
 if (fe->mask  mask  AE_WRITABLE) {
  if (!rfired || fe->wfileProc != fe->rfileProc)
   fe->wfileProc(eventLoop,fd,fe->clientData,mask);
 }
 processed++;
}

可以看到這個(gè)分發(fā)器,根據(jù) mask 的不同將事件分別分發(fā)給了讀事件和寫事件。

文件事件處理器的類型

Redis 有大量的事件處理器類型,我們就講解處理一個(gè)簡(jiǎn)單命令涉及到的三個(gè)處理器:

  • acceptTcpHandler 連接應(yīng)答處理器,負(fù)責(zé)處理連接相關(guān)的事件,當(dāng)有client 連接到Redis的時(shí)候們就會(huì)產(chǎn)生 AE_READABLE 事件。引發(fā)它執(zhí)行。
  • readQueryFromClinet 命令請(qǐng)求處理器,負(fù)責(zé)讀取通過(guò) sokect 發(fā)送來(lái)的命令。
  • sendReplyToClient 命令回復(fù)處理器,當(dāng)Redis處理完命令,就會(huì)產(chǎn)生 AE_WRITEABLE 事件,將數(shù)據(jù)回復(fù)給 client。

文件事件實(shí)現(xiàn)總結(jié)

我們按照開始給出的 Reactor 模型,從上到下講解了文件事件處理器的實(shí)現(xiàn),下面將會(huì)介紹時(shí)間時(shí)間的實(shí)現(xiàn)。

時(shí)間事件

Reids 有很多操作需要在給定的時(shí)間點(diǎn)進(jìn)行處理,時(shí)間事件就是對(duì)這類定時(shí)任務(wù)的抽象。

先看時(shí)間事件的數(shù)據(jù)結(jié)構(gòu):

/* Time event structure
 *
 * 時(shí)間事件結(jié)構(gòu)
 */
typedef struct aeTimeEvent {
 // 時(shí)間事件的唯一標(biāo)識(shí)符
 long long id; /* time event identifier. */
 // 事件的到達(dá)時(shí)間
 long when_sec; /* seconds */
 long when_ms; /* milliseconds */
 // 事件處理函數(shù)
 aeTimeProc *timeProc;
 // 事件釋放函數(shù)
 aeEventFinalizerProc *finalizerProc;
 // 多路復(fù)用庫(kù)的私有數(shù)據(jù)
 void *clientData;
 // 指向下個(gè)時(shí)間事件結(jié)構(gòu),形成鏈表
 struct aeTimeEvent *next;
} aeTimeEvent;

看見(jiàn) next 我們就知道這個(gè) aeTimeEvent 是一個(gè)鏈表結(jié)構(gòu)??磮D:

注意:這是一個(gè)按照id倒序排列的鏈表,并沒(méi)有按照事件順序排序。

processTimeEvent

Redis 使用這個(gè)函數(shù)處理所有的時(shí)間事件,我們整理一下執(zhí)行思路:

  • 記錄最新一次執(zhí)行這個(gè)函數(shù)的時(shí)間,用于處理系統(tǒng)時(shí)間被修改產(chǎn)生的問(wèn)題。
  • 遍歷鏈表找出所有 when_sec 和 when_ms 小于現(xiàn)在時(shí)間的事件。
  • 執(zhí)行事件對(duì)應(yīng)的處理函數(shù)。
  • 檢查事件類型,如果是周期事件則刷新該事件下一次的執(zhí)行事件。
  • 否則從列表中刪除事件。

綜合調(diào)度器(aeProcessEvents)

綜合調(diào)度器是 Redis 統(tǒng)一處理所有事件的地方。我們梳理一下這個(gè)函數(shù)的簡(jiǎn)單邏輯:

// 1. 獲取離當(dāng)前時(shí)間最近的時(shí)間事件
shortest = aeSearchNearestTimer(eventLoop);

// 2. 獲取間隔時(shí)間
timeval = shortest - nowTime;

// 如果timeval 小于 0,說(shuō)明已經(jīng)有需要執(zhí)行的時(shí)間事件了。
if(timeval  0){
 timeval = 0
}

// 3. 在 timeval 時(shí)間內(nèi),取出文件事件。
numevents = aeApiPoll(eventLoop, timeval);

// 4.根據(jù)文件事件的類型指定不同的文件處理器
if (AE_READABLE) {
 // 讀事件
 rfileProc(eventLoop,fd,fe->clientData,mask);
}
 // 寫事件
if (AE_WRITABLE) {
 wfileProc(eventLoop,fd,fe->clientData,mask);
}

以上的偽代碼就是整個(gè) Redis 事件處理器的邏輯。

我們可以再看看誰(shuí)執(zhí)行了這個(gè) aeProcessEvents:

void aeMain(aeEventLoop *eventLoop) {
 eventLoop->stop = 0;
 while (!eventLoop->stop) {
  // 如果有需要在事件處理前執(zhí)行的函數(shù),那么運(yùn)行它
  if (eventLoop->beforesleep != NULL)
   eventLoop->beforesleep(eventLoop);
  // 開始處理事件
  aeProcessEvents(eventLoop, AE_ALL_EVENTS);
 }
}

然后我們?cè)倏纯词钦l(shuí)調(diào)用了 eaMain:

int main(int argc, char **argv) {
 //一些配置和準(zhǔn)備
 ...
 aeMain(server.el);
 
 //結(jié)束后的回收工作
 ...
}

我們?cè)?Redis 的 main 方法中找個(gè)了它。

這個(gè)時(shí)候我們整理出的思路就是:

  • Redis 的 main() 方法執(zhí)行了一些配置和準(zhǔn)備以后就調(diào)用 eaMain() 方法。
  • eaMain() while(true) 的調(diào)用 aeProcessEvents()。

所以我們說(shuō) Redis 是一個(gè)事件驅(qū)動(dòng)的程序,期間我們發(fā)現(xiàn),Redis 沒(méi)有 fork 過(guò)任何線程。所以也可以說(shuō) Redis 是一個(gè)基于事件驅(qū)動(dòng)的單線程應(yīng)用。

總結(jié)

在后端的面試中 Redis 總是一個(gè)或多或少會(huì)問(wèn)到的問(wèn)題。

讀完這篇文章你也許就能回答這幾個(gè)問(wèn)題:

為什么 Redis 是一個(gè)單線程應(yīng)用?
為什么 Redis 是一個(gè)單線程應(yīng)用,卻有如此高的性能?
如果你用本文提供的知識(shí)點(diǎn)回答這兩個(gè)問(wèn)題,一定會(huì)在面試官心中留下一個(gè)高大的形象。

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

標(biāo)簽:景德鎮(zhèn) 澳門 香港 唐山 揚(yáng)州 贛州 廣東 林芝

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Redis中事件驅(qū)動(dòng)模型示例詳解》,本文關(guān)鍵詞  Redis,中,事件,驅(qū)動(dòng),模型,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Redis中事件驅(qū)動(dòng)模型示例詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Redis中事件驅(qū)動(dòng)模型示例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产高清在线a视频大全| 337p亚洲精品色噜噜狠狠| 免费的很黄很污的视频网站| 国产精品国产三级国产| 一二三四区精品视频| 国产又粗又猛又黄又爽| 亚洲自拍偷拍色片视频| 四虎4hu影库永久地址| 亚洲天堂五月天| 丰满人妻一区二区三区53号| 66m—66摸成人免费视频| 男人添女人下部高潮视频在线观看| 国产精品日韩一区二区免费视频| 久久久高清一区二区三区| 99久久精品国产观看| 亚洲精品国产九九九| 久久久久久久久久久视频| 4hu永久免费入口| 婷婷综合另类小说色区| 久久精品日韩一区二区三区| 久久天堂电影| 亚洲第一区第二区| 亚洲三区四区| 日韩精品电影一区二区三区| 国产精品久久久久久久久久久久冷| 久久久久久激情| 一本到在线视频| 成人免费毛片网| 亚洲熟妇av一区二区三区| 欧美伊人精品成人久久综合97| 久久久伦理片| 久久久黄色大片| 成人免费a视频| 久久精品视频9| 免费影视观看网站入口| 中文字幕精品网| av免费精品一区二区三区| 国产精品一区二区三区高清在线| 久久国产精品影院| 韩国福利在线| 国产精品美女久久久久久2018| 色哟哟无码精品一区二区三区| 波多野结衣乳巨码无在线观看| 国产www视频| 国产第一页在线观看| 欧美激情亚洲色图| 成人一区二区三区| 欧美最顶级的aⅴ艳星| 亚洲乱码日产精品bd| 欧美一区影院| 亚洲激情五月| 91九色精品视频| 久久久午夜影院| 在线观看制服搞黄视频| 成人在线免费看| 蜜桃视频成人在线观看| 伊人色综合久久天天五月婷| 日皮视频免费观看| 91佛爷在线| 久久综合免费视频影院| 久久精品欧美视频| 色婷婷av一区| 91精品欧美一区二区三区综合在| 91国内产香蕉| 亚洲国产日韩综合一区| 男女做爰猛烈刺激| 亚洲欧美三级伦理| 亚洲免费观看高清在线观看| 久热久精久品这里在线观看| 国产成人a视频高清在线观看| 经典一区二区三区| 久久久久久久久艹| 可以看av的网站久久看| 日本午夜人人精品| 日韩三区四区| 91国偷自产一区二区三区的观看方式| 日韩av电影院| 国产精品人成电影在线观看| 韩国免费在线视频| 性感美女久久精品| 欧美激情一区二区三级高清视频| 亚洲小说区图片| 涩涩日韩在线| 91精品婷婷国产综合久久竹菊| av在线播放成人| 亚洲国产成人av网| 久久精品第一页| 国产黄色片在线观看| 欧美精品日韩在线| 中文字幕免费中文| 欧美精品三级| 欧美视频免费看欧美视频| 97精品国产福利一区二区三区| 日韩视频一区二区三区四区| 久久综合色一综合色88| 麻豆国产精品777777在线| 亚洲国产色一区| 国产综合视频在线| 视频二区在线| 欧美天堂在线观看| 午夜精品国产精品大乳美女| 欧美色婷婷久久99精品红桃| 26uuu国产精品视频| 偷窥韩漫第三季| 久久综合九色99| 最近日韩免费视频| 日本v片在线免费观看| 国模吧精品人体gogo| 久久久国产精品一区| 亚洲片在线资源| 欧美一区二区视频在线观看| 九一国产精品| 欧美影院精品一区| 中文乱码字幕高清一区二区| 亚洲青涩在线| 欧美激情理论| 最新中文乱码字字幕在线| 国产精品xx| 久久久久久久久久久久久久av| 中文xxx视频| 国产日韩欧美麻豆| 亚洲欧美另类图片| 欧美日韩视频在线一区二区| 精品五月天久久| 免看一级a毛片一片成人不卡| 日韩国产亚洲欧美| 中文字幕日韩综合av| 可以免费看的av毛片| 成人91免费视频| 欧美专区亚洲专区| 变态另类ts人妖一区二区| a在线欧美一区| 欧美xxxxb| 日韩成人精品| 亚洲中文字幕无码av永久| 成人va天堂| 国产精品久久久久久久久久小说| 成人精品gif动图一区| 中文字幕在线观看一区| 国内精品久久久久久影院老狼| 啪啪av大全导航福利综合导航| 性xxxx视频| 黄色网页免费在线观看| 最新国产拍偷乱拍精品| 亚洲一区二区三区精品动漫| 国产精品福利影院| 午夜免费性福利| www.xxx.国产| 99热国内精品永久免费观看| 青青草.com| 欧美色视频一区二区三区在线观看| 蜜桃一区二区三区在线| 日韩高清不卡一区二区| 亚洲国产成人在人网站天堂| 色女孩综合影院| 欧美三级午夜理伦三级| 国产亚洲欧洲高清| 五月天激情综合| 九九视频九九热| 二区三区四区高清视频在线观看| 深夜福利在线观看直播| 处破女av一区二区| 91精品婷婷国产综合久久蝌蚪| av免费观看大全| 国产精品亚洲综合| 导航福利在线| 成人免费观看在线观看| 精品影院一区二区久久久| 日韩欧美精品三级| 成人免费视频网址| 亚洲图片一区二区| 国产污污在线观看| 国产视频精品一区二区三区| www.xxx国产| 黑鬼大战白妞高潮喷白浆| 国产成人精品网| 日韩电影在线观看完整版| 91美女精品| 成人黄色视屏网站| 日产精品久久久| 国产精品xxxx| 久久精品国产999大香线蕉| 在线免费av播放| 成人a区在线观看| 日韩视频不卡中文| 亚洲无人区一区| 嫩草研究院在线观看| 亚洲黄页视频免费观看| 一区二区国产盗摄色噜噜| ...xxx性欧美| 91精品国产高清自在线| 另类视频在线观看| 日韩你懂的在线观看| 波多野结衣一区二区三区在线| 免费视频拗女稀缺一区二区| 精品国产一区二区精华| 精品伦精品一区二区三区视频密桃| 亚洲人成毛片在线播放| 久久精品免费av| 91精品国产综合久久香蕉麻豆| 免费一区二区三区| 日韩一级免费片| 亚洲黄色小说在线观看| 亚洲欧美日韩另类| 免费精品国产的网站免费观看| 欧美三级一区二区| 欧美洲成人男女午夜视频| 91.com在线观看| 春色校园综合激情亚洲| 日韩免费观看高清完整版| 欧美特级限制片免费在线观看| 亚洲亚裔videos黑人hd| 亚洲va在线观看| 亚洲高清在线观看| 亚洲狼人国产精品| 91免费公开视频| 性高潮久久久久久久| 91蝌蚪九色| 亚洲人和日本人hd| 成人在线高清免费| 91在线直播亚洲| 欧美一二三区视频| 天天综合av| 少妇太紧太爽又黄又硬又爽| 久久91导航| 国产123在线| 美国一区二区三区在线播放| 久久亚洲国产中v天仙www| 凹凸成人在线| 国产91精品黑色丝袜高跟鞋| 小小女视频网站色琼网站| 国产精品久久精品牛牛影视| 成人免费网站在线| 最新中文字幕第一页| 国产精品视频免费一区二区三区| 日本成人精品视频| 五月婷婷一区二区| 日韩电影免费网址| 日本一区二区三区中文字幕| 国产激情视频在线观看| 国内精品免费一区二区三区| 精品免费久久久| 精品伦理精品一区| 午夜国产不卡在线观看视频| 国产精品1区2区3区4区| 97免费中文视频在线观看| 女人天堂亚洲aⅴ在线观看| 国产欧美一区二区三区网站| 噜噜噜噜噜在线视频| 一本色道无码道dvd在线观看| 在线观看的av| 亚洲ai欧洲av| 黄色免费在线播放| 日韩av成人高清| 亚洲性线免费观看视频成熟| 青青青免费在线视频| 久久精品—区二区三区舞蹈| 精品久久久99| 97国产在线播放| av3级在线| 国产精品自在| 欧美丰满日韩| 日韩国产精品一区二区| 中文字幕 国产精品| 成人免费无遮挡无码黄漫视频| 国产精品人人妻人人爽人人牛| 中文字幕中文字幕99| 欧美色欧美色| 啊啊啊国产视频| 国产一区二区精品丝袜| 亚洲欧美自偷自拍另类| 亚洲成人av在线电影| 国产精品久久亚洲| 国产亚洲精品久久久久久移动网络| 免费极品av一视觉盛宴| 国产午夜麻豆影院在线观看| 欧美女孩性生活视频| 乱一区二区三区在线播放| 国产精品久久久久久久泡妞| 日韩精品在线电影| 女仆av观看一区| 一区二区不卡在线视频 午夜欧美不卡在| 91久久大香伊蕉在人线| 欧美影院在线播放| 麻豆精品av| 国产在线精品91| 国产黄色av网站| 国产精品人人做人人爽| 卡一卡二国产精品| 欧美亚洲国产日韩| 欧美精品videos| 91短视频推广| 日韩精品一区二区免费| 伊人久久大香线蕉午夜av| 欧美日韩一区二区视频在线观看| 九一国产在线| 伊人网视频在线| 国产毛片毛片毛片| 色婷婷精品久久二区二区密| 欧美系列亚洲系列| 老熟妻内射精品一区| 国产高清久久久久| 天天干天天草天天射| 久久99精品久久久野外观看| 翔田千里亚洲一二三区| 久久久久免费精品国产| 国产日产欧美一区二区视频| 99国产精品免费网站| 1313精品午夜理伦电影| 山东少妇露脸刺激对白在线| 亚洲成人av免费在线观看| 中文字幕天堂av| 亚洲高清免费观看高清完整版在线观看| 女女同性女同一区二区三区91| 欧美日韩国产专区| 美女的诞生在线观看高清免费完整版中文| 亚洲成人在线网| 日韩免费高清视频| 人人鲁人人莫人人爱精品| 一二三四日本中文字幕| 国产精品日韩欧美综合| 日本爱爱免费视频| 国模视频一区| 久久影院电视剧免费观看| 亚洲av无码成人精品区| 凹凸日日摸日日碰夜夜爽1| 国产深喉视频一区二区| 亚洲精品视频导航|