午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > Redis做數據持久化的解決方案及底層原理

Redis做數據持久化的解決方案及底層原理

熱門標簽:北京400電話辦理收費標準 貴州電銷卡外呼系統 宿遷便宜外呼系統平臺 超呼電話機器人 山東外呼銷售系統招商 十堰營銷電銷機器人哪家便宜 鄭州人工智能電銷機器人系統 日本中國地圖標注 魔獸2青云地圖標注

之前的文章介紹了Redis的簡單數據結構的相關使用和底層原理,這篇文章我們就來聊一下Redis應該如何保證高可用。

數據持久化

我們知道雖然單機的Redis雖然性能十分的出色, 單機能夠扛住10w的QPS,這是得益于其基于內存的快速讀寫操作,那如果某個時間Redis突然掛了怎么辦?我們需要一種持久化的機制,來保存內存中的數據,否則數據就會直接丟失。

Redis有兩種方式來實現數據的持久化,分別是RDB(Redis Database)和AOF(Append Only File),你可以先簡單的把RDB理解為某個時刻的Redis內存中的數據快照,而AOF則是所有記錄了所有修改內存數據的指令的集合(也就是Redis指令的集合),而這兩種方式都會生成相應的文件落地到磁盤上,實現數據的持久化,方便下次恢復使用。

接下來就分別來聊聊這兩種持久化方案。

RDB

在redis中生成RDB快照的方式有兩種,一種是使用save,另一種是bgsave,但是底層實現上,其調用的是同一個函數,叫rdbsave,只是其調用的方式不同而已。

生成方法

save

save命令直接調用rdbsave方法,此時會阻塞Redis主進程,直至快照文件生成。

void saveCommand(client *c) {
    if (server.rdb_child_pid != -1) {
        addReplyError(c,"Background save already in progress");
        return;
    }
    rdbSaveInfo rsi, *rsiptr;
    rsiptr = rdbPopulateSaveInfo(rsi);
    if (rdbSave(server.rdb_filename,rsiptr) == C_OK) {
        addReply(c,shared.ok);
    } else {
        addReply(c,shared.err);
    }
}

bgsave

bgsave命令會fork出一個子進程,由fork出來的子進程調用rdbsave。父進程會繼續響應來自客戶端的讀寫請求。子進程完成RDB文件生成之后會給父進程發送信號,通知父進程保存完成。

/* BGSAVE [SCHEDULE] */
void bgsaveCommand(client *c) {
    int schedule = 0;

    /* The SCHEDULE option changes the behavior of BGSAVE when an AOF rewrite
     * is in progress. Instead of returning an error a BGSAVE gets scheduled. */
    if (c->argc > 1) {
        if (c->argc == 2  !strcasecmp(c->argv[1]->ptr,"schedule")) {
            schedule = 1;
        } else {
            addReply(c,shared.syntaxerr);
            return;
        }
    }

    rdbSaveInfo rsi, *rsiptr;
    rsiptr = rdbPopulateSaveInfo(rsi);

    if (server.rdb_child_pid != -1) {
        addReplyError(c,"Background save already in progress");
    } else if (hasActiveChildProcess()) {
        if (schedule) {
            server.rdb_bgsave_scheduled = 1;
            addReplyStatus(c,"Background saving scheduled");
        } else {
            addReplyError(c,
            "Another child process is active (AOF?): can't BGSAVE right now. "
            "Use BGSAVE SCHEDULE in order to schedule a BGSAVE whenever "
            "possible.");
        }
    } else if (rdbSaveBackground(server.rdb_filename,rsiptr) == C_OK) {
        addReplyStatus(c,"Background saving started");
    } else {
        addReply(c,shared.err);
    }
}

這也就是為什么Redis是單線程的,但卻能夠在生成RDB文件的同時對外提供服務。fork是unix系統上創建進程的主要方法,會把父進程的所有數據拷貝到子進程中,父子進程共享內存空間。

fork之后,操作系統內核會把父進程中的所有內存設置為只讀,只有當發生寫數據時,會發生頁異常中斷,內核會把對應的內存頁拷貝一份,父子進程各持有一份,所以在生成RDB過程中,由于使用了COW,內存臟頁會逐漸和子進程分開。

那么有沒有可能在調用bgsave的過程中,我再調用save命令呢,這個時候豈不是會生成兩份RDB文件?

實際上在調用save命令時,Redis會判斷bgsave是否正在執行,如果正在執行服務器就不能再調用底層的rdbsave函數了,這樣做可以避免兩個命令之間出現資源競爭的情況。

例如,在save命令中,有如下的判斷:

if (server.rdb_child_pid != -1) {
  addReplyError(c,"Background save already in progress");
  return;
}

而在bgsave中又有如下的判斷:

if (server.rdb_child_pid != -1) {
  addReplyError(c,"Background save already in progress");
} else if (hasActiveChildProcess()) {
  ...
}

可以看到都是對同一個變量的判斷,如下:

pid_t rdb_child_pid; /* PID of RDB saving child */

換句話說,在調用save、bgsave命令的時候,會提前去判斷bgsave是否仍然在運行當中,如果在運行當中,則不會繼續執行bgsave命令。而save命令本身就是阻塞的,如果此時有其他的命令過來了都會被阻塞, 直到save執行完畢,才會去處理。

那我把RDB文件生成了之后怎么使用呢?

Redis在啟動服務器的時候會調用rdbLoad函數,會把生成的RDB文件給加載到內存中來,在載入的期間,每載入1000個鍵就會處理一次已經到達的請求,但是只會處理publish、subscribe、psubscribe、unsubscribe、punsubscribe這個五個命令。其余的請求一律返回錯誤,直到載入完成。

你吹的這么好,RDB的優缺點分別是啥?

優點

RDB策略可以靈活配置周期,取決于你想要什么樣的備份策略。例如:

  • 每小時生成一次最近24小時的數據
  • 每天生成最近一周的數據
  • 每天生成最近一個月的數據

基于這個策略,可以快速的恢復之前某個時間段的數據。

其次,RDB非常的適合做冷備份,你可以把RDB文件存儲后轉移到其他的存儲介質上。甚至可以做到跨云存儲,例如放到OSS上的同時,又放到S3上,跨云存儲讓數據備份更加的健壯。

而且,基于RDB模式的恢復速度比AOF更快,因為AOF是一條一條的Redis指令,RDB則是數據最終的模樣。數據量大的話所有AOF指令全部重放要比RDB更慢。

缺點

RDB作為一個數據持久化的方案是可行的,但是如果要通過RDB做到Redis的高可用,RDB就不那么合適了。

因為如果Redis此時還沒有來得及將內存中的數據生成RDB文件,就先掛了,那么距離上次成功生成RDB文件時新增的這部分數據就會全部丟失,而且無法找回。

而且,如果內存的數據量很大的話,RDB即使是通過fork子進程來做的,但是也需要占用到機器的CPU資源,也可能會發生很多的也異常中斷,也可能造成整個Redis停止響應幾百毫秒。

AOF

上面提到過RDB不能滿足Redis的高可用。因為在某些情況下,會永久性的丟失一段時間內的數據,所以我們來聊聊另一種解決方案AOF。首先我們得有個概念,那就是RDB是對當前Redis Server中的數據快照,而AOF是對變更指令的記錄(所有的獲取操作不會記錄,因為對當前的Redis數據沒有改變)。

但是也正因為如此,AOF文件要比RDB文件更大。下面聊一下一個Redis命令請求從客戶端到AOF文件的過程。

AOF記錄過程

首先Redis的客戶端和服務器之間需要通信,客戶端發送的不是我們寫入的字符串,而是專門的協議文本。如果你可以熟悉Thrift或者Protobuf的話應該就能理解這個協議。

例如執行命令 SET KEY VALUE,傳到服務器就變成了"*3\r\n$3\r\nSET\r\n$3\r\nKEY\r\n$5\r\nVALUE\r\n"

然后Redis服務器就會根據協議文本的內容,選擇適當的handler進行處理。當客戶端將指令發送到Redis服務器之后,只要命令成功執行,就會將這個命令傳播到AOF程序中。

注意,傳播到AOF程序中之后不會馬上寫入磁盤,因為頻繁的IO操作會帶來巨大的開銷,會大大降低Redis的性能,協議文本會被寫到Redis服務器中的aof_buf中去,也叫AOF的寫入緩沖區。

你這全部都寫到緩沖區去了,啥時候落地?

每當serverCron(先有一個定時任務的概念,下面馬上就會講serverCron是啥)被執行的時候,flushAppendOnlyFile 這個函數就被調用。

這個命令會調用 write將寫入緩沖區的數據寫入到AOF文件中,但是這個時候還是沒有真正的落到磁盤上。這是OS為了提高寫入文件的效率,會將數據暫時寫入到OS的內存的緩沖區內,等到緩沖區被填滿了或超過了指定的時間,才會調用fsync或者sdatasync真正的將緩沖區的內容寫入到磁盤中。

但是如果在這期間機器宕了,那么數據仍然會丟失。所以如果想要真正的將AOF文件保存在磁盤上,必須要調用上面提到的兩個函數才行。

ServerCron

作用

現在我們就來具體聊一下serverCron函數,它主要是用于處理Redis中的常規任務。

什么叫常規任務?

就比如上面提到的AOF寫入緩沖區,每次serverCron執行的時候就會把緩沖區內的AOF寫入文件(當然,OS會寫入自己的buffer中)。其余的就像AOF和RDB的持久化操作,主從同步和集群的相關操作,清理失效的客戶端、過期鍵等等。

那這個cron間隔多久執行一次?

很多博客是直接給出的結論,100ms執行一次,口說無憑,我們直接擼源碼。下面是serverCron的函數定義。

/* This is our timer interrupt, called server.hz times per second.
 * .............
 */
int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) {
  ...
  server.hz = server.config_hz;
}

為了避免影響大家的思路,我省略了暫時對我們沒用的代碼和注釋。可以看到注釋中有called server.hz times per second。意思就是serverCron這個函數將會在每一秒中調用server.hz次,那這個server.hz又是啥?

server.hz

相信大家都知道HZ(赫茲)這個單位,它是頻率的國際單位制單位,表示每一條周期性事件發生的次數。所以,我們知道這個配置項是用于控制周期性事件發生的頻率的。

其賦值的地方在上面的函數中已經給出,可以看到其初始值是來源于redis.conf的配置文件。那讓我們看一下具體的配置。

# Redis calls an internal function to perform many background tasks, like
# closing connections of clients in timeout, purging expired keys that are
# never requested, and so forth.
#
# Not all tasks are performed with the same frequency, but Redis checks for
# tasks to perform according to the specified "hz" value.
#
# By default "hz" is set to 10. Raising the value will use more CPU when
# Redis is idle, but at the same time will make Redis more responsive when
# there are many keys expiring at the same time, and timeouts may be
# handled with more precision.
#
# The range is between 1 and 500, however a value over 100 is usually not
# a good idea. Most users should use the default of 10 and raise this up to
# 100 only in environments where very low latency is required.
hz 10

簡單的提取一下有用的信息,Redis會在內部調用函數來執行很多后臺的任務,而調用這些函數的頻率就由這個hz來決定的,其默認值為10。那也就是說,上面提到的 serverCron函數會在一秒鐘執行10次,這樣平均下來就是每100ms(1000ms/10)調用一次。

寫入策略

上面說到,如果Redis的AOF已經位于OS的緩沖中,如果此時宕機,那么AOF的數據同樣會丟失。

你這不行啊,那你這個持久化有什么意義?怎么樣數據才能不丟失?

這得聊一下AOF日志的寫入策略,它有三種策略,分別如下:

  • always 每個命令都會寫入文件并且同步到磁盤
  • everysec 每秒鐘同步一次數據到磁盤
  • no 不強制寫,等待OS自己去決定什么時候寫

很明顯always這種策略在真正的生產環境上是不可取的,每個命令都去寫文件,會造成極大的IO開銷,會占用Redis服務器的很多資源,降低Redis的服務效率。

而如果使用everysec策略的話,即使發生了斷電,機器宕機了,我最多也只會丟失一秒鐘的數據。

no則完全交與操作系統去調度,可能會丟失較多的數據。

666,那這AOF文件咋用的,怎么恢復?

上面提到過,AOF文件是記錄了來自客戶端的所有寫命令,所以服務器只需要讀入并重放一遍即可將Redis的狀態恢復。

但是,Redis的命令只能在客戶端中的上下文才能夠執行,所以Redis搞了一個沒有網絡連接的偽客戶端來執行命令,直到命令執行完畢。

老鐵,你這不行啊,萬一AOF日志數據量很大,你這豈不是要恢復很長時間,那服務豈不是不可用了?

的確,隨著服務器的運行,AOF的數據量會越來越大,重放所需要的時間也會越來越多。所以Redis有一個重寫(AOF Rewrite)機制,來實現對AOF文件的瘦身。

雖然名字叫對AOF文件的瘦身,但是實際上要做的操作跟之前已經生成的AOF文件沒有一毛錢的關系。

所謂瘦身是通過讀取Redis服務器當前的數據狀態來實現的,當然,這里的當前是在服務器正常運行的時候。其實你也可以理解為快照,只不過不是實打實的二進制文件了,而是直接設置快照值的命令。

用人話舉個例子,假設你Redis中有個鍵叫test,它的值的變化歷史是1 -> 3 -> 5 -> 7 -> 9這樣,那么如果是正常的AOF文件就會記錄5條Redis指令。而AOF Rewrite此時介入,就只會記錄一條test=9這樣的數據。

而之前的AOF文件還是照常的寫入,當新的AOF文件生成后替換即可。

你tm在逗我?你在rewrite的同時,服務器仍然在處理正常的請求,此時如果對服務器的狀態做了更改,你這個瘦身之后的AOF文件數據不就不一致了?

這種情況的確會出現,但是Redis通過一個AOF重寫緩沖區來解決了這個問題。

當rewrite開始后,Redis會fork一個子進程,讓子進程來實現AOF的瘦身操作,父進程則可以正常處理請求。AOF重寫緩沖區會在rewrite開始創建了子進程之后開始使用,此時Redis服務器會把寫的指令同時發送到兩個地方:

  • aof_buf,也就是上面提到的AOF文件的寫入緩沖區
  • AOF重寫緩沖區

你可能會問,為啥要記錄到兩個地方?上面提到過,Redis執行瘦身操作時,常規的AOF文件仍然是正常生成的,所以新的Redis指令一定會發送到寫入緩沖區。

而發送到AOF重寫緩沖區是為了重放在瘦身操作進行當中對Redis狀態進行的更改,這樣瘦身之后的AOF文件狀態才能保證與Redis的狀態一致。總的來說,就是為了保證瘦身的AOF文件中的數據狀態與Redis當時的內存狀態保持數據上的一致性。

End

關于Redis數據持久化的問題,就先聊這么多,下一期的計劃的應該就是聊一聊Redis的高可用的相關機制了。

©著作權歸作者所有:來自51CTO博客作者S.H的原創作品,如需轉載,請與作者聯系,否則將追究法律責任
https://blog.51cto.com/u_15292354/3073048

到此這篇關于Redis做數據持久化的解決方案及底層原理的文章就介紹到這了,更多相關Redis數據持久化內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • redis數據的兩種持久化方式對比
  • 一篇文章揭秘Redis的磁盤持久化機制
  • Redis教程(十):持久化詳解
  • Redis的持久化方案詳解
  • 淺談redis內存數據的持久化方式
  • Redis數據持久化方式技術解析

標簽:吉安 江蘇 臺州 大慶 朝陽 楊凌 北京 果洛

巨人網絡通訊聲明:本文標題《Redis做數據持久化的解決方案及底層原理》,本文關鍵詞  Redis,做,數據,持久化,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Redis做數據持久化的解決方案及底層原理》相關的同類信息!
  • 本頁收集關于Redis做數據持久化的解決方案及底層原理的相關信息資訊供網民參考!
  • 推薦文章
    久久久久99精品久久久久| 91传媒免费看| 鲁鲁狠狠狠7777一区二区| 日本综合在线观看| 亚洲女性喷水在线观看一区| 91福利视频导航| 一级黄色短视频| 欧美性在线观看| 亚洲国产综合久久| 久久五月情影视| 潘金莲一级淫片aaaaaaa| 久久久久亚洲蜜桃| 亚洲一区中文字幕| 热久久久久久久| 欧美精品一区二区三区在线四季| 91亚洲视频在线观看| 国产成人一区二| 奇米一区二区三区av| 国产一区深夜福利| 高清不卡在线观看av| 成人在线观看毛片| 久久综合资源网| 免费黄色特级片| 欧美在线你懂得| 日韩少妇一区二区| 欧美日韩一区三区四区| www.日本高清视频| 亚洲精品久久久一区二区三区| 一级成人黄色片| 成人免费大片黄在线播放| 国产成人一区在线| 激情五月六月婷婷| 欧美性xxxxxxxx| 欧美成人aaa片一区国产精品| 久久久久久久久久久国产| 特级西西444www大精品视频免费看| 在线电影av不卡网址| 二区三区在线视频| 黄色99视频| 午夜精品在线看| 在线观看免费黄色网址| 欧美在线国产精品| 久久综合一区二区| 国产av熟女一区二区三区| 亚洲人成在线播放网站岛国| 色国产在线视频| 狠狠色丁香婷婷综合久久片| 国产91成人video| 污污网站在线免费观看| 国产福利不卡| 午夜电影网一区| 欧美日韩在线观看免费| 午夜欧美不卡精品aaaaa| 亚洲免费视频网| 国产中文字幕乱人伦在线观看| 欧美一区二区大片| 少妇精品一区二区三区| 亚洲欧美国产日韩中文字幕| 刘亦菲毛片一区二区三区| 精品在线一区| 色屁屁一区二区| 看黄色一级大片| 亚洲国产成人不卡| 在线综合视频播放| 一级一片免费看| 91影院未满十八岁禁止入内| 国产精品白丝jk白祙喷水网站| 久草福利在线观看| 国产精品吊钟奶在线| 久久久国际精品| 国产日产精品一区二区三区的介绍| 2019最新中文字幕| 丁香婷婷综合色啪| 岛国av免费观看| 欧美极度另类性三渗透| 国产成人鲁色资源国产91色综| 亚洲色偷偷色噜噜狠狠99网| 国产有码一区二区| 福利精品视频在线| 日本波多野结衣在线| 国模无码视频一区二区三区| 欧美黄色成人网| 久久精品欧美一区二区三区不卡 | 午夜天堂影视香蕉久久| 国产又大又长又粗| 天美一区二区三区| 97久草视频| 一本大道综合伊人精品热热| 天天射,天天干| 一级 黄 色 片一| 奇米四色中文综合久久| 色综合久久中文综合久久牛| 亚洲欧美激情国产综合久久久| 精品人妻无码中文字幕18禁| 国产亚洲一区二区三区在线播放| 精品日韩欧美在线| 激情综合网最新| 豆国产97在线 | 亚洲| 99久热在线精品视频| 国产91精品久久久久久| 亚洲线精品一区二区三区八戒| 亚洲国产综合网| 久久成年人网站| 狠狠综合久久av| 一区二区激情视频| 欧美一级性视频| 国产精品揄拍100视频| 五月天在线免费视频| 5566日本婷婷色中文字幕97| 91精品国产高清一区二区三区蜜臀 | 欧美日韩免费观看一区二区三区| 国产老妇伦国产熟女老妇视频| 青青草原国产在线视频| 欧美一区二区三区四区夜夜大片 | 日本一区网站| 日韩在线免费av| 亚洲日本中文字幕区| www.日日夜夜| 日韩精品一区三区| 成人午夜免费在线| 精品国产一区二区三| 久久韩剧网电视剧| 在线精品视频免费观看| 国产精品伦理一区二区| 国产一区二区伦理| 国产伦一区二区| 国产性生活网站| 熟女俱乐部一区二区| 日韩免费视频播放| 91视频国产精品| 欧美激情久久久| 亚洲精品一区二三区不卡| 国产精品大尺度| 国产乱一区二区| 久久精品电影| 久久久久99精品| 91精品一区二区三区蜜桃 | 91久久国产最好的精华液| 国产精品视频一区二区三区不卡| 免费国产精品视频| 国产一级理论片| aaa黄色大片| 女女调教被c哭捆绑喷水百合| 又粗又黑又大的吊av| 蜜桃精品久久久久久久免费影院| 国外成人在线播放| 精品久久久久av影院| 五月婷婷激情综合| 亚洲激情校园春色| 成人免费在线播放视频| 国产精品美女一区| 免费看三级黄色片| 男插女视频网站| 中文字幕avav| 波多野结衣三级视频| 北条麻妃av高潮尖叫在线观看| 日韩精彩视频| 久久免费99精品久久久久久| 国产精品二区在线| 风间由美久久久| 成人免费黄色网| 91精品国产一区二区三区动漫| 久久久久久久久电影| 在线日韩日本国产亚洲| 久久精品最新地址| 亚洲成人精品av| 国产香蕉97碰碰久久人人| 欧美一级在线免费| 国产一区二区三区久久精品| 亚洲国产精品久久久| 在线精品国产欧美| 中文字幕在线观看视频www| 国产精品一品二区三区的使用体验| 久久久久久久久久久久久av| 黄色一级片免费看| 中文在线观看免费网站| 91成人在线免费| 无码国产精品一区二区免费16| 极品少妇xxxx精品少妇| 一级片免费观看视频| 国产精品suv一区二区三区| 国产无遮挡呻吟娇喘视频| 国精品无码一区二区三区| 九九精品免费视频| 国产婷婷色一区二区在线观看| 久久久.www| 国产成人精品一区二三区四区五区| 蜜桃视频在线观看一区| 国产欧美精品区一区二区三区 | 国产伦理一区二区三区| 天堂av一区二区| 免费成人进口网站| 日韩a级在线观看| 免费看a级黄色片| 久久久久久久久久久久| 色欲一区二区三区精品a片| 中文字幕日本视频| 亚洲国产av一区二区| 日韩精品亚洲一区| 中文字幕欧美一| 午夜av电影一区| 亚洲精品自拍视频| 久久久国产成人精品| 精品久久蜜桃| 日韩a∨精品日韩在线观看| 日韩va在线观看| 激情五月少妇a| 国产偷拍一区二区| 国产欧美在线观看一区| 精品久久久久久中文字幕大豆网| 精品视频色一区| 亚洲午夜未删减在线观看| 国产一区二区色| 97久久国产亚洲精品超碰热| 91日韩视频在线观看| 五月婷婷中文字幕| 青椒成人免费视频| 日本一区二区成人在线| 亚洲乱码国产乱码精品精| 欧美一区二区三区艳史| 国产人妻人伦精品| 波多野结衣亚洲一区二区| 亚洲av电影一区| 色综合久久中文综合久久牛| 国产亚洲精品激情久久| 日韩欧美三级电影| 丰满人妻一区二区三区53视频| 国产日韩在线免费观看| 国产成人精品一区二区三区网站观看| 亚洲激情自拍视频| 韩国19禁主播vip福利视频| 黄色国产精品一区二区三区| 人妻 丝袜美腿 中文字幕| 最近中文字幕av| 国产精品家庭影院| 欧美久久精品一级黑人c片 | 久久精品一级片| 国产尤物视频在线观看| 久久久99精品久久| 色哟哟亚洲精品一区二区| 中文字幕精品—区二区日日骚| 中文字幕制服丝袜| 丰满人妻熟女aⅴ一区| 国产日韩高清在线| 欧美另类精品xxxx孕妇| 亚洲欧美日韩不卡| 久久久久亚洲av成人毛片韩| 国产亚洲综合色| 中文字幕日本欧美| 亚洲v国产v在线观看| 欧美成人aaaaⅴ片在线看| 成人午夜av电影| 欧美成人久久久| 毛片一区二区三区四区| 国产情侣一区二区| 亚洲成a人片综合在线| 成人国产精品日本在线| av无码一区二区三区| 99re热这里只有精品视频| 国产香蕉一区二区三区在线视频 | 欧美第一区第二区| 黄频视频在线观看| 九九热在线视频播放| 亚洲在线视频一区| 国产精品偷伦视频免费观看国产 | 免费日韩av电影| 青青操免费在线视频| 欧美性猛交一区二区三区精品| 久久久综合亚洲91久久98| 无码黑人精品一区二区| 亚洲成av人综合在线观看| 国产精品久久久久久久久久尿| 人妻巨大乳一二三区| 99久久免费精品| 国产激情久久久久| 精品午夜福利在线观看| 黑人巨大精品欧美一区二区免费 | 老妇喷水一区二区三区| 亚洲欧洲av一区二区| 亚洲成a人无码| 丁香六月久久综合狠狠色| 国产日韩中文字幕| 人妻 日韩精品 中文字幕| 精品伦理精品一区| 成人av一级片| 久久伊99综合婷婷久久伊| 国产精品日韩av| 在线能看的av| 欧美岛国在线观看| 日韩av片网站| 久久久久久黄色| 日韩三级在线播放| 六月丁香综合网| 久久久精品久久| 国产成人无码精品| 欧美精品1区2区3区| 男操女免费网站| 欧美一区二区三区四| 欧美性20hd另类| 丁香六月激情婷婷| 国产精品一二三四区| 成人免费网站在线观看| 国产精品人人妻人人爽| 国产亚洲xxx| 永久免费未满蜜桃| 亚洲成人资源网| 久久久久狠狠高潮亚洲精品| 成人欧美一区二区三区白人 | 久久视频免费在线| 国产在线麻豆精品观看| 日本成人激情视频| 中文字幕+乱码+中文乱码www| 亚洲色图偷窥自拍| 国产盗摄x88av| 日韩av在线播放资源| www.av视频| 亚洲女同性videos| 在线视频这里只有精品| 制服丝袜激情欧洲亚洲| 波多野在线播放| 亚洲欧美中文日韩在线v日本| 国产真实的和子乱拍在线观看| 日韩一区二区在线看片| jizz18女人高潮| 久久九九亚洲综合| 国产精品视频在线观看免费| 日韩av电影院| 免费不卡在线观看| 亚洲高清精品中出| 一区二区三区在线免费视频| 国产美女网站在线观看| 亚洲成在人线免费| 成年人网站免费看| 亚洲精品av在线播放| 国产九色在线播放九色| 日韩在线视频中文字幕| 无码人妻丰满熟妇精品| 久久久久久亚洲精品| 久久午夜精品| 亚洲jizzjizz日本少妇| 91视频免费看| av在线网址导航| 日韩午夜精品视频| 免费视频网站www| 欧美有码在线视频| 天堂一区二区在线| 成人黄色片免费| 91精品久久久久久蜜臀| 手机av在线看| 亚洲综合色av| 亚洲精品国产无天堂网2021| 日本五十肥熟交尾| 亚洲深夜福利在线| 久久久水蜜桃av免费网站| 天堂精品一区二区三区| 在线视频亚洲一区| 国精产品一区一区二区三区mba| 欧美人与物videos| 天堂av手机版| 欧美精品成人网| 国产亚洲欧洲高清一区| 蜜桃久久av| av无码久久久久久不卡网站| 91精品国产91热久久久做人人| 综合久久中文字幕| 亚洲精品中字| 色悠悠久久综合| 一级一级黄色片| 亚洲毛片aa| 欧美电影免费提供在线观看| 午夜精品久久久久久久蜜桃| 国产精品久久7| 欧美性猛交xxxx乱大交3| 男人天堂av在线播放| 国产日韩欧美视频在线| 久久久久久免费| 人妻大战黑人白浆狂泄| 97在线观看视频国产| 国产日韩欧美a| www.com.av| 国产自产精品| 日韩一区二区三区视频| 五月婷婷六月丁香综合| 欧美一级在线看| 中文字幕国产亚洲| 成人晚上爱看视频| 久久久久亚洲av成人无码电影| 91视频九色网站| 欧美在线免费播放| 国产精品永久久久久久久久久| 日韩精品视频一区二区在线观看| 最好看的2019的中文字幕视频| 久久精品视频网| 亚洲高清毛片一区二区| 伊人天天久久大香线蕉av色| 亚洲免费电影在线观看| 久久精品国产一区二区| 国产美女久久久久久| 亚洲欧洲免费无码| 久久在线视频在线| 亚洲综合久久久| 色窝窝无码一区二区三区| 亚洲理论中文字幕| 国产精品69久久| 色狠狠色狠狠综合| 日本视频在线一区| 91视频综合网| 日韩一区二区三区不卡视频| 国产精品入口尤物| 欧美女孩性生活视频|