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

主頁 > 知識(shí)庫 > 為啥懶 Redis 是更好的 Redis

為啥懶 Redis 是更好的 Redis

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

英文原文:Lazy Redis is better Redis

前言

大家都知道 Redis 是單線程的。真正的內(nèi)行會(huì)告訴你,實(shí)際上 Redis 并不是完全單線程,因?yàn)樵趫?zhí)行磁盤上的特定慢操作時(shí)會(huì)有多線程。目前為止多線程操作絕大部分集中在 I/O 上以至于在不同線程執(zhí)行異步任務(wù)的小型庫被稱為 bio.c: 也就是 Background I/O。

然而前陣子我提交了一個(gè)問題,在問題里我承諾提供一個(gè)很多人(包括我自己)都想要的功能,叫做“免費(fèi)懶加載”。原始的問題在這

問題的根本在于,Redis 的 DEL 操作通常是阻塞的。因此如果你發(fā)送 Redis “DEL mykey” 命令,碰巧你的 key 有 5000萬個(gè)對(duì)象,那么服務(wù)器將會(huì)阻塞幾秒鐘,在此期間服務(wù)器不會(huì)處理其他請(qǐng)求。歷史上這被當(dāng)做 Redis 設(shè)計(jì)的副作用而被接受,但是在特定的用例下這是一個(gè)局限。DEL 不是唯一的阻塞式命令,卻是特殊的一個(gè)命令,因?yàn)槲覀冋J(rèn)為:Redis 非???,只要你用復(fù)雜度為 O(1) 和 O(log_N) 的命令。你可以自由使用 O(N) 的命令,但是要知道這不是我們優(yōu)化的用例,你需要做好延遲的準(zhǔn)備。

這聽起來很合理,但是同時(shí)即便用快速操作創(chuàng)建的對(duì)象也需要被刪除。在這種情況下,Redis 會(huì)阻塞。

第一次嘗試

對(duì)于單線程服務(wù)器,為了讓操作不阻塞,最簡(jiǎn)單的方式就是用增量的方式一點(diǎn)點(diǎn)來,而不是一下子把整個(gè)世界都搞定。例如,如果要釋放一個(gè)百萬級(jí)的對(duì)象,可以每一個(gè)毫秒釋放1000個(gè)元素,而不是在一個(gè) for() 循環(huán)里一次性全做完。CPU 的耗時(shí)是差不多的,也許會(huì)稍微多一些,因?yàn)檫壿嫺嘁恍?,但是從用戶來看延時(shí)更少一些。當(dāng)然也許實(shí)際上并沒有每毫秒刪除1000個(gè)元素,這只是個(gè)例子。重點(diǎn)是如何避免秒級(jí)的阻塞。在 Redis 內(nèi)部做了很多事情:最顯然易見的是 LRU 淘汰機(jī)制和 key 的過期,還有其他方面的,例如增量式的對(duì) hash 表進(jìn)行重排。

剛開始我們是這樣嘗試的:創(chuàng)建一個(gè)新的定時(shí)器函數(shù),在里面實(shí)現(xiàn)淘汰機(jī)制。對(duì)象只是被添加到一個(gè)鏈表里,每次定時(shí)器調(diào)用的時(shí)候,會(huì)逐步的、增量式的去釋放。這需要一些小技巧,例如,那些用哈希表實(shí)現(xiàn)的對(duì)象,會(huì)使用 Redis 的 SCAN 命令里相同的機(jī)制去增量式的釋放:在字典里設(shè)置一個(gè)游標(biāo)來遍歷和釋放元素。通過這種方式,在每次定時(shí)器調(diào)用的時(shí)候我們不需要釋放整個(gè)哈希表。在重新進(jìn)入定時(shí)器函數(shù)時(shí),游標(biāo)可以告訴我們上次釋放到哪里了。

適配是困難的

你知道這里最困難的部分是哪里嗎?這次我們是在增量式的做一件很特別的事情:釋放內(nèi)存。如果內(nèi)存的釋放是增量式的,服務(wù)器的內(nèi)容增長將會(huì)非???,最后為了得到更少的延時(shí),會(huì)消耗調(diào)無限的內(nèi)存。這很糟,想象一下,有下面的操作:

WHILE 1
    SADD myset element1 element2 … many many many elements
    DEL myset
END

如果慢慢的在后臺(tái)去刪除myset,同時(shí)SADD調(diào)用又在不斷的添加大量的元素,內(nèi)存使用量將會(huì)一直增長。

好在經(jīng)過一段嘗試之后,我找到一種可以工作的很好的方式。定時(shí)器函數(shù)里使用了兩個(gè)想法來適應(yīng)內(nèi)存的壓力:

1.檢測(cè)內(nèi)存趨勢(shì):增加還是減少?以決定釋放的力度。

2.同時(shí)適配定時(shí)器的頻率,避免在只有很少需要釋放的時(shí)候去浪費(fèi)CPU,不用頻繁的去中斷事件循環(huán)。當(dāng)確實(shí)需要的時(shí)候,定時(shí)器也可以達(dá)到大約300HZ的頻率。
這里有一小段代碼,不過這個(gè)想法現(xiàn)在已經(jīng)不再實(shí)現(xiàn)了:

/計(jì)算內(nèi)存趨勢(shì),只要是上次和這次內(nèi)存都在增加,就傾向于認(rèn)為內(nèi)存趨勢(shì)
 是增加的 */

if (prev_mem lt; mem) mem_trend = 1;
   
mem_trend *= 0.9; /* 逐漸衰減 */
   
int mem_is_raising = mem_trend gt; .1;

   
/* 釋放一些元素 */
   
size_t workdone = lazyfreeStep(LAZYFREE_STEP_SLOW);

   
/* 根據(jù)現(xiàn)有狀態(tài)調(diào)整定時(shí)器頻率 */
   
if (workdone) {
       
    if (timer_period == 1000) timer_period = 20;

    if (mem_is_raising timer_period gt; 3)
           
        timer_period--; /* Raise call frequency. */
       
    else if (!mem_is_raising timer_period lt; 20)

        timer_period++; /* Lower call frequency. */
   
} else {
       
  timer_period = 1000;    /* 1 HZ */
   
}

這是一個(gè)小技巧,工作的也很好。不過郁悶的是我們還是不得不在單線程里執(zhí)行。要做好需要有很多的邏輯,而且當(dāng)延遲釋放(lazy free)周期很繁忙的時(shí)候,每秒能完成的操作會(huì)降到平時(shí)的65%左右。
如果是在另一個(gè)線程去釋放對(duì)象,那就簡(jiǎn)單多了:如果有一個(gè)線程只做釋放操作的話,釋放總是要比在數(shù)據(jù)集里添加數(shù)據(jù)來的要快。

當(dāng)然,主線程和延遲釋放線程直接對(duì)內(nèi)存分配器的使用肯定會(huì)有競(jìng)爭(zhēng),不過 Redis 在內(nèi)存分配上只用到一小部分時(shí)間,更多的時(shí)間用在I/O、命令分發(fā)、緩存失敗等等。
不過,要實(shí)現(xiàn)線程化的延遲釋放有一個(gè)大問題,那就是 Redis 自身。內(nèi)部實(shí)現(xiàn)完全是追求對(duì)象的共享,最終都是些引用計(jì)數(shù)。干嘛不盡可能的共享呢?這樣可以節(jié)省內(nèi)存和時(shí)間。例如:SUNIONSTORE 命令最后得到的是目標(biāo)集合的共享對(duì)象。類似的,客戶端的輸出緩存包含了作為返回結(jié)果發(fā)送給socket的對(duì)象的列表,于是在類似 SMEMBERS 這樣的命令調(diào)用之后,集合的所有成員都有可能最終在輸出緩存里被共享。看上去對(duì)象共享是那么有效、漂亮、精彩,還特別酷。

但是,嘿,還需要再多說一句的是,如果在 SUNIONSTORE 命令之后重新加載了數(shù)據(jù)庫,對(duì)象都取消了共享,內(nèi)存也會(huì)突然回復(fù)到最初的狀態(tài)。這可不太妙。接下來我們發(fā)送應(yīng)答請(qǐng)求給客戶端,會(huì)怎么樣?當(dāng)對(duì)象比較小時(shí),我們實(shí)際上是把它們拼接成線性的緩存,要不然進(jìn)行多次 write() 調(diào)用效率是不高的!(友情提示,writev() 并沒有幫助)。于是我們大部分情況下是已經(jīng)復(fù)制了數(shù)據(jù)。對(duì)于編程來說,沒有用的東西卻存在,通常意味著是有問題的。
事實(shí)上,訪問一個(gè)包含聚合類型數(shù)據(jù)的key,需要經(jīng)過下面這些遍歷過程:

key -gt; value_obj -gt; hash table -gt; robj -gt; sds_string

如果去掉整個(gè) tobj 結(jié)構(gòu)體,把聚合類型轉(zhuǎn)換成 SDS 字符串類型的哈希表(或者跳表)會(huì)怎么樣?(SDS是Redis內(nèi)部使用的字符串類型)。

這樣做有個(gè)問題,假設(shè)有個(gè)命令:SADD myset myvalue,舉個(gè)例子來說,我們做不到通過client->argv[2] 來引用用來實(shí)現(xiàn)集合的哈希表的某個(gè)元素。我們不得不很多次的把值復(fù)制出來,即使數(shù)據(jù)已經(jīng)在客戶端命令解析后創(chuàng)建的參數(shù) vector 里,也沒辦法去復(fù)用。Redis的性能受控于緩存失效,我們也許可以用稍微間接一些的辦法來彌補(bǔ)一下。
于是我在這個(gè) lazyfree 的分支上開始了一項(xiàng)工作,并且在 Twitter 上聊了一下,但是沒有公布上下文的細(xì)節(jié),結(jié)果所有的人都覺得我像是絕望或者瘋狂了(甚至有人喊道 lazyfree 到底是什么玩意)。那么,我到底做了什么呢?

把客戶端的輸出緩存由 robj 結(jié)構(gòu)體改成動(dòng)態(tài)字符串。在創(chuàng)建 reply 的時(shí)候總是復(fù)制值的內(nèi)容。
把所有的 Redis 數(shù)據(jù)類型轉(zhuǎn)換成 SDS 字符串,而不是使用共享對(duì)象結(jié)構(gòu)。聽上去很簡(jiǎn)單?實(shí)際上這花費(fèi)了數(shù)周的時(shí)間,涉及到大約800行高風(fēng)險(xiǎn)的代碼修改。不過現(xiàn)在全都測(cè)試通過了。
把 lazyfree 重寫成線程化的。
結(jié)果是 Redis 現(xiàn)在在內(nèi)存使用上更加高效,因?yàn)樵跀?shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)上不再使用 robj 結(jié)構(gòu)體(不過由于某些代碼還涉及到大量的共享,所以 robj 依然存在,例如在命令分發(fā)和復(fù)制部分)。線程化的延遲釋放工作的很好,比增量的方式更能減少內(nèi)存的使用,雖然增量方式在實(shí)現(xiàn)上與線程化的方式相似,并且也沒那么糟糕?,F(xiàn)在,你可以刪除一個(gè)巨大的 key,性能損失可以忽略不計(jì),這非常有用。不過,最有趣的事情是,在我測(cè)過的一些操作上,Redis 現(xiàn)在都要更快一些。消除間接引用(Less indirection)最后勝出,即使在不相關(guān)的一些測(cè)試上也更快一些,還是因?yàn)榭蛻舳说妮敵鼍彺娆F(xiàn)在更加簡(jiǎn)單和高效。

最后我把增量式的延遲釋放實(shí)現(xiàn)從分支里刪除,只保留了線程化的實(shí)現(xiàn)。

關(guān)于 API 的一點(diǎn)備注

不過 API 又怎么樣了呢?DEL 命令仍然是阻塞的,默認(rèn)還跟以前一樣,因?yàn)樵?Redis 中 DEL 命令就意味著釋放內(nèi)存,我并不打算改變這一點(diǎn)。所以現(xiàn)在你可以用新的命令 UNLINK,這個(gè)命令更清晰的表明了數(shù)據(jù)的狀態(tài)。

UNLINK 是一個(gè)聰明的命令:它會(huì)計(jì)算釋放對(duì)象的開銷,如果開銷很小,就會(huì)直接按 DEL 做的那樣立即釋放對(duì)象,否則對(duì)象會(huì)被放到后臺(tái)隊(duì)列里進(jìn)行處理。除此之外,這兩個(gè)命令在語義上是相同的。

我們也實(shí)現(xiàn)了 FLUSHALL/FLUSHDB 的非阻塞版本,不過沒有新增的 API,而是增加了一個(gè) LAZY 選項(xiàng),說明是否更改命令的行為。

不只是延遲釋放

現(xiàn)在聚合數(shù)據(jù)類型的值都不再共享了,客戶端的輸出緩存也不再包含共享對(duì)象了,這一點(diǎn)有很多文章可做。例如,現(xiàn)在終于可以在 Redis 里實(shí)現(xiàn)線程化的 I/O,從而不同的客戶端可以由不同的線程去服務(wù)。也就是說,只有訪問數(shù)據(jù)庫才需要全局的鎖,客戶端的讀寫系統(tǒng)調(diào)用,甚至是客戶端發(fā)送的命令的解析,都可以在線程中去處理。這跟 memcached 的設(shè)計(jì)理念類似,我比較期待能夠被實(shí)現(xiàn)和測(cè)試。

還有,現(xiàn)在也可以在其他線程實(shí)現(xiàn)針對(duì)聚合數(shù)據(jù)類型的特定的慢操作,可以讓某些 key 被“阻塞”,但是所有其他的客戶端不會(huì)被阻塞。這個(gè)可以用很類似現(xiàn)在的阻塞操作的方式去完成(參考blocking.c),只是增加一個(gè)哈希表保存那些正在處理的 key 和對(duì)應(yīng)的客戶端。于是一個(gè)客戶端請(qǐng)求類似 SMEMBERS 這樣的命令,可能只是僅僅阻塞住這一個(gè) key,然后會(huì)創(chuàng)建輸出緩存處理數(shù)據(jù),之后在釋放這個(gè) key。只有那些嘗試訪問相同的 key 的客戶端,才會(huì)在這個(gè) key 被阻塞的時(shí)候被阻塞住。
所有這些需求起了更激烈的內(nèi)部變化,但這里的底線我們已很少顧忌。我們可以補(bǔ)償對(duì)象復(fù)制時(shí)間來減少高速緩存的缺失,以更小的內(nèi)存占用聚合數(shù)據(jù)類型,所以我們現(xiàn)在可依照線程化的 Redis 來進(jìn)行無共享化設(shè)計(jì),這一設(shè)計(jì),可以很容易超越我們的單線程。在過去,一個(gè)線程化的 Redis 看起來總像是一個(gè)壞主意,因?yàn)闉榱藢?shí)現(xiàn)并發(fā)訪問數(shù)據(jù)結(jié)構(gòu)和對(duì)象其必定是一組互斥鎖,但幸運(yùn)的是還有別的選擇獲得這兩個(gè)環(huán)境的優(yōu)勢(shì)。如果我們想要,我們依然可以選擇快速操作服務(wù),就像我們過去在主線程所做的那樣。這包含在復(fù)雜的代價(jià)之上,獲取執(zhí)行智能(performance-wise)。

計(jì)劃表

我在內(nèi)部增加了很多東西,明天就上線看上去是不現(xiàn)實(shí)的。我的計(jì)劃是先讓3.2版(已經(jīng)是unstable狀態(tài))成為候選版本(RC)狀態(tài),然后把我們的分支合并到進(jìn)入unstable的3.4版本。

不過在合并之前,需要對(duì)速度做細(xì)致的回歸測(cè)試,這有不少工作要做。

如果你現(xiàn)在就想嘗試的話,可以從Github上下載lazyfree分支。不過要注意的是,當(dāng)前我并不是很頻繁的更新這個(gè)分支,所以有些地方可能會(huì)不能工作。

您可能感興趣的文章:
  • 超強(qiáng)、超詳細(xì)Redis數(shù)據(jù)庫入門教程
  • redis常用命令、常見錯(cuò)誤、配置技巧等分享
  • Redis操作命令總結(jié)
  • Redis中5種數(shù)據(jù)結(jié)構(gòu)的使用場(chǎng)景介紹
  • 30個(gè)php操作redis常用方法代碼例子
  • 64位Windows下安裝Redis教程
  • Linux下Redis的安裝和部署

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

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《為啥懶 Redis 是更好的 Redis》,本文關(guān)鍵詞  為啥,懶,Redis,是,更,好的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《為啥懶 Redis 是更好的 Redis》相關(guān)的同類信息!
  • 本頁收集關(guān)于為啥懶 Redis 是更好的 Redis的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    一区二区三区四区在线看| 国产呻吟对白刺激无套视频在线| 亚洲深深色噜噜狠狠爱网站| 99久re热视频精品98| 永久免费网站在线| 成人黄色免费短视频| 99久久精品免费看| 青娱乐国产在线| 蜜桃视频一区二区在线观看| 国产一区二区免费视频| 亚洲精品日日夜夜| 亚洲无线观看| 日韩在线中文视频| 福利在线小视频| 国外成人免费在线播放| 韩日视频一区| 国产精品27p| 天天好比中文综合网| 亚洲欧美国产高清va在线播放| 免费毛片一区二区三区久久久| 国产黄视频网站| 欧美经典一区二区三区| 国产 日韩 欧美 综合| 欧美视频免费一区二区三区| 粉嫩虎白女毛片人体| caoporn国产一区二区| 在线观看免费视频综合| 亚洲自拍偷拍福利| 精品欧美aⅴ在线网站| 日本夜夜草视频网站| 国产精品av一区二区| 可以在线看的黄色网址| 自拍偷拍第八页| 国产一区二区剧情av在线| 久久精品亚洲精品国产欧美| 国产色视频一区| 欧美另类z0zx974| 九色porny自拍视频| 国产精品视频流白浆免费视频| 中文字幕乱在线伦视频乱在线伦视频| 日本公妇乱淫免费视频一区三区| 精品视频在线看| 九色自拍视频在线观看| 中文字幕久久精品| 亚洲另类第一页| 看一级黄色录像| 久久99精品久久久久久噜噜| 深夜福利视频在线观看| 久久激情av| 欧美黑人xxxxx| 亚洲精选视频免费看| 日本一二三区在线观看| 偷拍盗摄高潮叫床对白清晰| 在线观看成人小视频| 99精品全国免费观看视频软件| 91av视频在线观看| 一本一道久久a久久综合蜜桃| 日韩精品一区国产麻豆| 正在播放精油久久| 欧美性高潮床叫视频| 福利资源在线观看| 国产社区精品视频| 在线看片你懂的| 中文字幕在线看人| 亚洲色图一区二区三区| 国产字幕中文| 欧美特级黄色录像| 成人午夜福利一区二区| 欧美第一在线视频| 国产精品av久久久久久无| 欧美日韩调教| 成人免费看片网站| 51精品国产黑色丝袜高跟鞋| 国内久久精品视频| 国内一区二区视频| 不卡的av电影| 在线观看av一区| 久久久久北条麻妃免费看| 国产精品你懂的| 精品一区二区三区四区五区| 欧美亚洲大陆| 国产香蕉一区二区三区在线视频| 久久久久五月天| 五月天激情国产综合婷婷婷| 国产乱视频在线观看播放| 男人的天堂va在线| 麻豆国产精品va在线观看不卡| 色网在线免费观看| 欧美日韩国产色综合一二三四| 久久蜜桃资源一区二区老牛| 狠狠操视频网站| 国产精品乱码一区二区视频| 亚洲精品无码一区二区| 日韩欧美中文字幕一区二区| 91短视频版在线观看www免费| 欧美性猛片aaaaaaa做受| 福利小视频网站| 成人久久18免费网站图片| 盗摄系列偷拍视频精品tp| 91.com在线观看| 成人免费视频网站在线观看| 欧美精品在线极品| 一区二区欧美国产| 久久精品国产一区二区三区日韩| 天堂资源在线中文精品| 久久久精品午夜少妇| 懂色av粉嫩av蜜臀av一区二区三区| 男人先锋资源| 欧美精品一区二区三区久久| 国产区精品视频| 国产老妇另类xxxxx| 欧美日韩一区在线观看视频| 亚洲婷婷久久综合| 欧美成人精品一区二区男人小说| 久久精品国产69国产精品亚洲| 韩国av永久免费| 99精品久久免费看蜜臀剧情介绍| 久久99国产精一区二区三区| 日本青青草视频| 玩弄中年熟妇正在播放| 夜间精品视频| 久久免费99精品久久久久久| 国产精品www在线观看| 欧美性性性性性ⅹxxbbbb| 国产又大又黄视频| 久久全国免费久久青青小草| 欧美另类z0zx974| 欧美日韩国产一区在线| 国产97免费视| 日韩久久久久久久久久久| 不卡高清视频专区| 天堂成人免费av电影一区| 中文字幕有码av| 丁香花电影在线观看完整版| 欧美天堂视频| 一区二区三区日韩精品视频| 国产免费拔擦拔擦8x在线播放| 欧美一区二区精品| 久久精品丝袜高跟鞋| 亚洲一区二区视频在线观看| 中文字幕乱码人妻综合二区三区| 亚洲欧美成人影院| 九色porny丨精品自拍视频| 久久成人福利视频| 亚洲欧美久久久久一区二区三区| 综合国产在线视频| 国产精品一品二区三区的使用体验| 蜜乳av中文字幕| 亚洲女厕所小便bbb| 色在线视频网| 欧美三级又粗又硬| 7777精品伊人久久久大香线蕉经典版下载| 欧美久久精品午夜青青大伊人| 久久午夜精品一区二区| 3d蒂法精品啪啪一区二区免费| av中文字幕一区二区三区| 亚洲国产精品综合| 久久久久蜜桃| 色欲av永久无码精品无码蜜桃| 日本一区二区三区www| 麻豆精品永久免费视频| 紧缚奴在线一区二区三区| 成人av毛片在线观看| 欧美日韩hd| 天天操天天操天天操| 美腿丝袜亚洲综合| 你懂的视频一区二区| 欧美激情视频一区二区三区免费| 中文字幕亚洲综合久久| 成人三级黄色免费网站| 久久久久亚洲精品一区二区三区| 韩国一区二区三区四区| 中文字幕第一区第二区| 69**夜色精品国产69乱| 欧美另类暴力丝袜| 中文字幕一区久久| 亚洲综合日韩在线| 欧日韩不卡视频| 性欧美13一14内谢| 精品久久久久久久大神国产| 神马久久久久久久久| 成人午夜毛片| 懂色av粉嫩av浪潮av| 欧美在线三区| 日本成人在线网站| 精品久久久中文字幕人妻| 亚洲永久精品唐人导航网址| 美女福利视频网| 最近2018年在线中文字幕高清| 日韩深夜影院| 成人线上播放| 欧美自拍电影| 黄色一级大片在线免费看国产一| 日批在线观看视频| 91香蕉视频在线下载| 亚洲一区在线观看免费| 免费观看亚洲| 成人无号精品一区二区三区| 成人性生交大片免费看在线播放| 国新精品乱码一区二区三区18| 五月天av影院| 成年人羞羞的网站| 91视频精品| 国产精品欧美日韩一区二区| 天堂av一区二区三区| 日本欧美一区二区三区不卡视频| free性欧美1819hd| 亚洲天堂免费视频| 成人黄色在线免费| 亚洲成人日韩| 老汉色影院首页| 国产成人三级| 一二三在线视频社区| 色老头在线视频| 欧美丝袜一区二区三区| 日韩高清不卡av| 美女被人操视频在线观看| 在线看的网站你懂| 日本一卡二卡在线| 欧美顶级大胆免费视频| 国产一区二区三区精品在线观看| 久久人人爽人人爽人人片av高清| 亚洲国产成人91精品| 中文字幕影片免费在线观看| 好吊视频一区二区三区四区| 美女脱光衣服与内衣内裤一区二区三区四区| 免费网站在线观看视频| 免费亚洲电影| 五月天婷婷激情网| 宅男在线观看免费高清网站| 色黄网站在线观看| 亚洲做受高潮无遮挡| 波多野结衣 久久| 亚洲AV无码久久精品国产一区| 你懂的在线观看网站| 喷白浆一区二区| 四虎永久在线精品免费网址| 亚洲爽爆av| 乳奴隷乳フ辱| 91亚洲国产成人久久精品麻豆| 婷婷激情在线| 欧美在线日韩在线| chinesegaysextube| 欧美自拍偷拍一区二区| 中文字幕一区二区三区在线播放| 免费一级大片| 国产一区二区av| 激情五月深爱五月| 欧美福利在线观看| 97在线观视频免费观看| 成人精品视频在线观看| 日本道色综合久久影院| 日本一二三区视频免费高清| 99re6在线视频| 女人黄色片免费| 国产91白丝在线播放| 亚洲高清在线观看视频| 精品成人无码久久久久久| 国模吧一区二区| 亚洲一区二区三区精品动漫| 老牛国产精品一区的观看方式| 黄色一级片免费看| 5566av亚洲| 爱情电影网av一区二区| 日韩大尺度视频| 一区二区三区精品在线观看| 午夜精品久久久久久久99老熟妇| 国产嫩草一区二区三区在线观看| 日韩夫妻性生活xx| 国产又黄又大又粗视频| 伊人久久亚洲影院| 一区二区三区韩国免费中文网站| 国产美女久久精品| 欧美日韩一级黄色片| 成人影院www在线观看| 欧美自拍资源在线| 麻豆精品免费视频入口| 久久久久久亚洲精品不卡| 无码人妻av一区二区三区波多野| 天天色棕合合合合合合合| 中文字幕日本一区二区| 亚洲大片免费观看| 午夜国产不卡在线观看视频| 欧美一区二区三区喷汁尤物| 亚洲小说春色综合另类电影| 亚洲国产欧美一区二区三区久久| av免费在线观看网站| 在线你懂的视频| 日韩精品专区在线影院重磅| 欧美人与拘性视交免费看| 国产一二三在线观看| 日本一级理论片在线大全| 国产精品igao视频网网址不卡日韩| 午夜影院韩国伦理在线| 白白色亚洲国产精品| 国产精品一区久久| 欧美在线首页| 欧美成人福利在线观看| 精品动漫一区二区三区在线观看| 中文字幕av不卡在线| 亚洲色图 在线视频| 国产精品无码专区在线观看| 久久日韩视频| 欧美午夜精品一区二区三区| 国产不卡的av| 色多多国产成人永久免费网站| 不卡av在线免费观看| 一区二区三区精品国产| 中文乱码免费一区二区| 中文字幕在线二区| 国产欧美亚洲一区| 亚洲人成影院在线观看| 欧美日韩在线观看一区二区| 欧美一区二区三区免费观看| 欧美日韩精品亚洲精品| 欧美舌奴丨vk视频| 2021国产在线| 国产性生活毛片| 亚洲精品在线看| 久久国产精品免费看| 日韩av日韩在线观看| 97视频在线观看播放| 竹内纱里奈兽皇系列在线观看| 国产亚洲精品成人av久久ww| 九色精品视频在线观看| 日韩免费观看视频| 欧美情侣在线播放| 欧美aaa大片|