国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Redis單線程已經(jīng)很快了,為什么6.0要引入多線程?帶來什么優(yōu)勢?

共 15932字,需瀏覽 32分鐘

 ·

2021-04-06 16:30

程序員的成長之路
互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享 
關(guān)注


閱讀本文大概需要 8.5 分鐘。

來自:r6d.cn/b8b7

Redis作為一個基于內(nèi)存的緩存系統(tǒng),一直以高性能著稱,因沒有上下文切換以及無鎖操作,即使在單線程處理情況下,讀速度仍可達到11萬次/s,寫速度達到8.1萬次/s。但是,單線程的設計也給Redis帶來一些問題:

  • 只能使用CPU一個核;
  • 如果刪除的鍵過大(比如Set類型中有上百萬個對象),會導致服務端阻塞好幾秒;
  • QPS難再提高。
針對上面問題,Redis在4.0版本以及6.0版本分別引入了Lazy Free以及多線程IO,逐步向多線程過渡,下面將會做詳細介紹。

單線程原理

都說Redis是單線程的,那么單線程是如何體現(xiàn)的?如何支持客戶端并發(fā)請求的?為了搞清這些問題,首先來了解下Redis是如何工作的。
Redis服務器是一個事件驅(qū)動程序,服務器需要處理以下兩類事件:
  • 文件事件:Redis服務器通過套接字與客戶端(或者其他Redis服務器)進行連接,而文件事件就是服務器對套接字操作的抽象;服務器與客戶端的通信會產(chǎn)生相應的文件事件,而服務器則通過監(jiān)聽并處理這些事件來完成一系列網(wǎng)絡通信操作,比如連接accept,read,write,close等;時間事件:Redis服務器中的一些操作(比如serverCron函數(shù))需要在給定的時間點執(zhí)行,而時間事件就是服務器對這類定時操作的抽象,比如過期鍵清理,服務狀態(tài)統(tǒng)計等。

如上圖,Redis將文件事件和時間事件進行抽象,時間輪訓器會監(jiān)聽I/O事件表,一旦有文件事件就緒,Redis就會優(yōu)先處理文件事件,接著處理時間事件。在上述所有事件處理上,Redis都是以單線程形式處理,所以說Redis是單線程的。此外,如下圖,Redis基于Reactor模式開發(fā)了自己的I/O事件處理器,也就是文件事件處理器,Redis在I/O事件處理上,采用了I/O多路復用技術(shù),同時監(jiān)聽多個套接字,并為套接字關(guān)聯(lián)不同的事件處理函數(shù),通過一個線程實現(xiàn)了多客戶端并發(fā)處理。
正因為這樣的設計,在數(shù)據(jù)處理上避免了加鎖操作,既使得實現(xiàn)上足夠簡潔,也保證了其高性能。當然,Redis單線程只是指其在事件處理上,實際上,Redis也并不是單線程的,比如生成RDB文件,就會fork一個子進程來實現(xiàn),當然,這不是本文要討論的內(nèi)容。

Lazy Free機制

如上所知,Redis在處理客戶端命令時是以單線程形式運行,而且處理速度很快,期間不會響應其他客戶端請求,但若客戶端向Redis發(fā)送一條耗時較長的命令,比如刪除一個含有上百萬對象的Set鍵,或者執(zhí)行flushdb,flushall操作,Redis服務器需要回收大量的內(nèi)存空間,導致服務器卡住好幾秒,對負載較高的緩存系統(tǒng)而言將會是個災難。為了解決這個問題,在Redis 4.0版本引入了Lazy Free,將慢操作異步化,這也是在事件處理上向多線程邁進了一步。
如作者在其博客中所述,要解決慢操作,可以采用漸進式處理,即增加一個時間事件,比如在刪除一個具有上百萬個對象的Set鍵時,每次只刪除大鍵中的一部分數(shù)據(jù),最終實現(xiàn)大鍵的刪除。但是,該方案可能會導致回收速度趕不上創(chuàng)建速度,最終導致內(nèi)存耗盡。因此,Redis最終實現(xiàn)上是將大鍵的刪除操作異步化,采用非阻塞刪除(對應命令UNLINK),大鍵的空間回收交由單獨線程實現(xiàn),主線程只做關(guān)系解除,可以快速返回,繼續(xù)處理其他事件,避免服務器長時間阻塞。
以刪除(DEL命令)為例,看看Redis是如何實現(xiàn)的,下面就是刪除函數(shù)的入口,其中,lazyfree_lazy_user_del是是否修改DEL命令的默認行為,一旦開啟,執(zhí)行DEL時將會以UNLINK形式執(zhí)行。

void delCommand(client *c) {
    delGenericCommand(c,server.lazyfree_lazy_user_del);
}

/* This command implements DEL and LAZYDEL. */
void delGenericCommand(client *c, int lazy) {
    int numdel = 0, j;

    for (j = 1; j < c->argc; j++) {
        expireIfNeeded(c->db,c->argv[j]);
        // 根據(jù)配置確定DEL在執(zhí)行時是否以lazy形式執(zhí)行
        int deleted  = lazy ? dbAsyncDelete(c->db,c->argv[j]) :
                              dbSyncDelete(c->db,c->argv[j]);
        if (deleted) {
            signalModifiedKey(c,c->db,c->argv[j]);
            notifyKeyspaceEvent(NOTIFY_GENERIC,
                "del",c->argv[j],c->db->id);
            server.dirty++;
            numdel++;
        }
    }
    addReplyLongLong(c,numdel);
}`

同步刪除很簡單,只要把key和value刪除,如果有內(nèi)層引用,則進行遞歸刪除,這里不做介紹。下面看下異步刪除,Redis在回收對象時,會先計算回收收益,只有回收收益在超過一定值時,采用封裝成Job加入到異步處理隊列中,否則直接同步回收,這樣效率更高?;厥帐找嬗嬎阋埠芎唵危热?code style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">String類型,回收收益值就是1,而Set類型,回收收益就是集合中元素個數(shù)。

/* Delete a key, value, and associated expiration entry if any, from the DB.
 * If there are enough allocations to free the value object may be put into
 * a lazy free list instead of being freed synchronously. The lazy free list
 * will be reclaimed in a different bio.c thread. */

#define LAZYFREE_THRESHOLD 64
int dbAsyncDelete(redisDb *db, robj *key) {
    /* Deleting an entry from the expires dict will not free the sds of
     * the key, because it is shared with the main dictionary. */

    if (dictSize(db->expires) > 0) dictDelete(db->expires,key->ptr);

    /* If the value is composed of a few allocations, to free in a lazy way
     * is actually just slower... So under a certain limit we just free
     * the object synchronously. */

    dictEntry *de = dictUnlink(db->dict,key->ptr);
    if (de) {
        robj *val = dictGetVal(de);
        // 計算value的回收收益
        size_t free_effort = lazyfreeGetFreeEffort(val);

        /* If releasing the object is too much work, do it in the background
         * by adding the object to the lazy free list.
         * Note that if the object is shared, to reclaim it now it is not
         * possible. This rarely happens, however sometimes the implementation
         * of parts of the Redis core may call incrRefCount() to protect
         * objects, and then call dbDelete(). In this case we'll fall
         * through and reach the dictFreeUnlinkedEntry() call, that will be
         * equivalent to just calling decrRefCount(). */

        // 只有回收收益超過一定值,才會執(zhí)行異步刪除,否則還是會退化到同步刪除
        if (free_effort > LAZYFREE_THRESHOLD && val->refcount == 1) {
            atomicIncr(lazyfree_objects,1);
            bioCreateBackgroundJob(BIO_LAZY_FREE,val,NULL,NULL);
            dictSetVal(db->dict,de,NULL);
        }
    }

    /* Release the key-val pair, or just the key if we set the val
     * field to NULL in order to lazy free it later. */

    if (de) {
        dictFreeUnlinkedEntry(db->dict,de);
        if (server.cluster_enabled) slotToKeyDel(key->ptr);
        return 1;
    } else {
        return 0;
    }
}`

通過引入a threaded lazy free,Redis實現(xiàn)了對于Slow OperationLazy操作,避免了在大鍵刪除,FLUSHALL,FLUSHDB時導致服務器阻塞。當然,在實現(xiàn)該功能時,不僅引入了lazy free線程,也對Redis聚合類型在存儲結(jié)構(gòu)上進行改進。因為Redis內(nèi)部使用了很多共享對象,比如客戶端輸出緩存。當然,Redis并未使用加鎖來避免線程沖突,鎖競爭會導致性能下降,而是去掉了共享對象,直接采用數(shù)據(jù)拷貝,如下,在3.x和6.x中ZSet節(jié)點value的不同實現(xiàn)。

// 3.2.5版本ZSet節(jié)點實現(xiàn),value定義robj *obj
/* ZSETs use a specialized version of Skiplists */
typedef struct zskiplistNode {
    robj *obj;
    double score;
    struct zskiplistNode *backward;
    struct zskiplistLevel {
        struct zskiplistNode *forward;
        unsigned int span;
    } level[];
} zskiplistNode;

// 6.0.10版本ZSet節(jié)點實現(xiàn),value定義為sds ele
/* ZSETs use a specialized version of Skiplists */
typedef struct zskiplistNode {
    sds ele;
    double score;
    struct zskiplistNode *backward;
    struct zskiplistLevel {
        struct zskiplistNode *forward;
        unsigned long span;
    } level[];
} zskiplistNode;`

去掉共享對象,不但實現(xiàn)了lazy free功能,也為Redis向多線程跨進帶來了可能,正如作者所述:
Now that values of aggregated data types are fully unshared, and client output buffers don’t contain shared objects as well, there is a lot to exploit. For example it is finally possible to implement threaded I/O in Redis, so that different clients are served by different threads. This means that we’ll have a global lock only when accessing the database, but the clients read/write syscalls and even the parsing of the command the client is sending, can happen in different threads.

多線程I/O及其局限性

Redis在4.0版本引入了Lazy Free,自此Redis有了一個Lazy Free線程專門用于大鍵的回收,同時,也去掉了聚合類型的共享對象,這為多線程帶來可能,Redis也不負眾望,在6.0版本實現(xiàn)了多線程I/O。

實現(xiàn)原理

正如官方以前的回復,Redis的性能瓶頸并不在CPU上,而是在內(nèi)存和網(wǎng)絡上。因此6.0發(fā)布的多線程并未將事件處理改成多線程,而是在I/O上,此外,如果把事件處理改成多線程,不但會導致鎖競爭,而且會有頻繁的上下文切換,即使用分段鎖來減少競爭,對Redis內(nèi)核也會有較大改動,性能也不一定有明顯提升。
如上圖紅色部分,就是Redis實現(xiàn)的多線程部分,利用多核來分擔I/O讀寫負荷。在事件處理線程每次獲取到可讀事件時,會將所有就緒的讀事件分配給I/O線程,并進行等待,在所有I/O線程完成讀操作后,事件處理線程開始執(zhí)行任務處理,在處理結(jié)束后,同樣將寫事件分配給I/O線程,等待所有I/O線程完成寫操作。
以讀事件處理為例,看下事件處理線程任務分配流程:

int handleClientsWithPendingReadsUsingThreads(void) {
    ...

    /* Distribute the clients across N different lists. */
    listIter li;
    listNode *ln;
    listRewind(server.clients_pending_read,&li);
    int item_id = 0;
    // 將等待處理的客戶端分配給I/O線程
    while((ln = listNext(&li))) {
        client *c = listNodeValue(ln);
        int target_id = item_id % server.io_threads_num;
        listAddNodeTail(io_threads_list[target_id],c);
        item_id++;
    }

    ...

    /* Wait for all the other threads to end their work. */
    // 輪訓等待所有I/O線程處理完
    while(1) {
        unsigned long pending = 0;
        for (int j = 1; j < server.io_threads_num; j++)
            pending += io_threads_pending[j];
        if (pending == 0break;
    }

    ...

    return processed;
}`

I/O線程處理流程:

void *IOThreadMain(void *myid) {
    ...

    while(1) {
        ...

        // I/O線程執(zhí)行讀寫操作
        while((ln = listNext(&li))) {
            client *c = listNodeValue(ln);
            // io_threads_op判斷是讀還是寫事件
            if (io_threads_op == IO_THREADS_OP_WRITE) {
                writeToClient(c,0);
            } else if (io_threads_op == IO_THREADS_OP_READ) {
                readQueryFromClient(c->conn);
            } else {
                serverPanic("io_threads_op value is unknown");
            }
        }
        listEmpty(io_threads_list[id]);
        io_threads_pending[id] = 0;

        if (tio_debug) printf("[%ld] Done\n", id);
    }
}`

局限性

從上面實現(xiàn)上看,6.0版本的多線程并非徹底的多線程,I/O線程只能同時執(zhí)行讀或者同時執(zhí)行寫操作,期間事件處理線程一直處于等待狀態(tài),并非流水線模型,有很多輪訓等待開銷。

Tair多線程實現(xiàn)原理

相較于6.0版本的多線程,Tair的多線程實現(xiàn)更加優(yōu)雅。如下圖,Tair的Main Thread負責客戶端連接建立等,IO Thread負責請求讀取、響應發(fā)送、命令解析等,Worker Thread線程專門用于事件處理。IO Thread讀取用戶的請求并進行解析,之后將解析結(jié)果以命令的形式放在隊列中發(fā)送給Worker Thread處理。Worker Thread將命令處理完成后生成響應,通過另一條隊列發(fā)送給IO Thread。為了提高線程的并行度,IO ThreadWorker Thread之間采用無鎖隊列 和管道 進行數(shù)據(jù)交換,整體性能會更好。

小結(jié)

Redis 4.0引入Lazy Free線程,解決了諸如大鍵刪除導致服務器阻塞問題,在6.0版本引入了I/O Thread線程,正式實現(xiàn)了多線程,但相較于Tair,并不太優(yōu)雅,而且性能提升上并不多,壓測看,多線程版本性能是單線程版本的2倍,Tair多線程版本則是單線程版本的3倍。在作者看來,Redis多線程無非兩種思路,I/O threadingSlow commands threading,正如作者在其博客中所說:
I/O threading is not going to happen in Redis AFAIK, because after much consideration I think it’s a lot of complexity without a good reason. Many Redis setups are network or memory bound actually. Additionally I really believe in a share-nothing setup, so the way I want to scale Redis is by improving the support for multiple Redis instances to be executed in the same host, especially via Redis Cluster.
What instead I really want a lot is slow operations threading, and with the Redis modules system we already are in the right direction. However in the future (not sure if in Redis 6 or 7) we’ll get key-level locking in the module system so that threads can completely acquire control of a key to process slow operations. Now modules can implement commands and can create a reply for the client in a completely separated way, but still to access the shared data set a global lock is needed: this will go away.
Redis作者更傾向于采用集群方式來解決I/O threading,尤其是在6.0版本發(fā)布的原生Redis Cluster Proxy背景下,使得集群更加易用。
此外,作者更傾向于slow operations threading(比如4.0版本發(fā)布的Lazy Free)來解決多線程問題。后續(xù)版本,是否會將IO Thread實現(xiàn)的更加完善,采用Module實現(xiàn)對慢操作的優(yōu)化,著實值得期待。

<END>

掃碼加入技術(shù)交流群,不定送書

推薦閱讀:

2020 年騰訊新增 20 億行代碼,鵝廠第一編程語言還是它

能掙錢的,開源 SpringBoot 商城系統(tǒng),功能超全,超漂亮,真TMD香!

最近面試BAT,整理一份面試資料《Java面試BATJ通關(guān)手冊》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。

獲取方式:點個「在看」,點擊上方小卡片,進入公眾號后回復「面試題」領取,更多內(nèi)容陸續(xù)奉上。

朕已閱 

瀏覽 44
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 亚洲日本黄色视频| 国产91探花系列在线观看| 欧美后门菊门交| 能看的AV网站| 免费无码一级A片大黄在线观看| 久久久久久久久久久国产精品| 91人妻人人澡人人爽人人精吕| 伊人网综合| 人人操在线观看| 五月天成人网址| 99久久精品国产一区二区三区| 黄色AV电影| 影音先锋AV资源网站| 无码秘蜜桃一区二区| 午夜日韩| 中国字幕在线观看韩国电影| 无码一区二区三区四区五区六区 | 波多野结衣东京热| 操综合网| 国产成人大香蕉| 国产一级片无码| 欧美一级做| 北条麻妃无码精品AV怎么看| 综合激情网| 国产熟妇码视频| 可以免费看的av| 黄色毛片一级| 亚洲成人在线无码| 人人超碰在线| 国产美女免费视频| 五月黄片| 天堂网免费视频| 91一区二区| 天天看天天操| 在线一区二区三区四区| 在线观看视频91| 亚洲中文免费视频| 欧美婷婷综合| 无码人妻一区二区三区免水牛视频 | 黄色免费一级片| 国产一区二区视频在线| 九色丨蝌蚪丨老版熟女| 五香丁香天堂网| 狠狠大香蕉| 日逼片A| 丁香五月天堂网| 18XXX亚洲HD护士JD| 国产女人18毛片精品18水| 大肉大捧一出免费观看| 精品欧美一区二区三区久久久| www.三级片| 日韩在线观看中文字幕| 国产精品在线免费观看| 久久久久无码国产精品一区| 看免费黄色录像| 最新日韩中文字幕| 国产精品aaa| 黄色影视不卡| 欧美激情色色| 三级片AAA成人免费| 国产久久久| 国产中文字幕在线| 久热中文| www.超碰| 久久久五月天| 综合久久久| 蜜臀久久99精品久久久电影| 青青草视频在线免费观看| 奇米av| 无码精品一区二区| 日韩欧美操逼| 亚洲免费在线视频观看| 国产高清一区二区三区| 91麻豆精品传媒国产| 免费一级黄色| 日本少妇高潮| 91爽爽| 国产精品秘麻豆免费版现看视频| 中文字幕AV无码| 国产—a毛—a毛A免费| 亚洲性爱无码| 久久久久久久性爱| 五月天久久久| 亚洲一区中文字幕| 在线观看国产黄色| 国产一区二区在线视频| 一道本久久| 搞搞视频| 嫩草在线精品| 日本人妻视频| 无码一区二区三| 一区二区无码视频| 国产小视频在线| 内射在线播放| 亚洲视频一区| 中文字幕乱伦性爱| 久久精品免费看| 夜夜骚| 亚洲高清无码免费在线观看| 日韩人妻精品一区二区| 亚洲国产av电影| 苏妲己一级婬片A片| 精品国产午夜福利| 欧美激情亚洲无码| 亚洲天堂国产视频| 欧美日韩一区在线观看| 少妇喷水视频| 国产精品不卡一区二区三区| 好男人WWW一区二区三区| 欧美老熟女18| 国产h视频| 99热这里只有精品1| 91免费国产视频| 久久嫩草精品久久久久| 一级A片免费观看| 亚洲成人性爱| 99这里都是精品| 久久夜色精品噜噜亚洲AV | 超碰永久| 无码熟妇人妻无码AV在线天堂 | 亚洲性爱在线| 天天天日天天天操| 抠逼网站| 亚洲天堂2016| 免费在线观看亚洲| 3d啪啪动漫| 探花在线综合| 91成人无码视频| 国产成人无码区亚洲A片356p| 日皮视频免费在线观看| 悠悠色影院| 国产精品视频播放| 插进去综合图| 国内精产品一二区秘| 国产黄色a片| 超碰av电影| 国产精品小电影| 亚洲国产成人AV| 亚洲国产激情视频| 影音先锋在线视频| 亚洲欧美在线观看视频| 欧美精品99久久久| 水蜜桃网站| 国产美女操逼网站| 人人操人人网站| 肏逼免费视频| 中国特级毛片| 精品91视频| 免费精品视频| 亚洲一级黄色| www.黄色| 五月天无码av| 人人妻人人操人人干| 国产成人精品一区二区三区视频| 国产免费av片| 高清日韩无码视频| 北条麻妃无码在线播放| 一区在线观看| 成人无码小电影| 97欧美日韩| 另类欧美| 中文字字幕在线中文| 91禁樱桃在线| 毛片国产| 精品国产免费观看久久久_久久天天| 午夜操B| 91社区成人影院| 亚洲男人的天堂AV| 在线你懂得| 在线黄片视频| 欧美精产国品一二三产品动漫| 无套免费视频欧美| 91三级片在线播放| 久久成人福利| 亚洲国产成人91PORN| 99综合在线| 天天操夜夜爽| 国产欧美日韩三级| 免费黄视频在线观看| 男女黄网站| 欧美八区| 殴美老妇BBBBBBBBB| 欧美AAAAAA视频| 三级毛片网站| 永久AV免费网站| 亚洲欧美日韩色图| 伊人久久大香| 久操无码视频| 日韩毛片在线免费观看| 国产高清中文字幕| 看a网站| 成人黄片免费看| 国产欧美综合在线三区| 无码视频一二三区| 亚洲视频,中文字幕| 天天干天天日天天色| 天天爽天天干| 亚欧成人在线视频| www.久久精品视频| 黄色国产AV| 欧美黄片免费观看| 日本三级片在线动| 国产尤物在线观看| 亚洲中文字幕视频在线| 黄色一级片免费看| 日韩三级| 92自拍| 天天艹天天干| 欧美成人黄色| 嫩草在线观看| 国产91www| 五月丁香视频在线观看| 蜜桃BBwBBWBBwBBw| 蜜臀久久99精品久久久巴士| 一道本激情视频| 日韩成人免费观看| 美女少妇激情BBBB| 国内无码自拍| 丁香色五月婷婷| 亚洲久久视频| 国产乱伦精品视频| 黄色国产网站| 激情黄色视频| 丁香五月在线观看| www.seses| 狠狠干狠狠艹| 九九精品国产| 一插菊花综合网| 国产精品毛片VA一区二区三区| 操操操综合网| 超碰在线观看91| 特级婬片A片AAA毛片AA做头| 亚洲婷婷在线观看| 日韩黄色免费网站| 亚洲男人的天堂网| 大香伊人中文字幕精品| 97伊人| 天天欧美| 影音先锋在线成人| 国产精品S色| 日韩成人一区二区| 91在线无码精品秘国产三年 | 黄av在线| 日韩1页| 色色天堂成人电影| 日韩在线国产| 欧美肉大捧一进一出小说| 伊人一区| 欧美日韩一级黄片| 国产精品久久久久无码| 91日韩欧美| 日韩三级一区二区| 91福利网站| 五月婷婷激情网| 午夜影院操| 99国产在线观看免费视频| 一本色道久久综合无码人妻| 约操少妇| 亚洲高清电影| 国产Av一区二区三区| 日韩AV在线直播| 欧美黄色成人视频| 日本一区二区视频| 白白操白白干| 亚洲A∨无码无在线观看| 免费亚洲无码| 这里只有精品91| 久久国产精品99久久人人澡| 国产精品黄色电影| 特级毛片AAAAAA蜜桃| 久久精品免费电影| 91新视频| www久草| 91人妻人人澡人人爽人妻| 中文字幕永久免费| 精品人妻无码一区二区三区| 蜜芽成人网站| 91日韩在线| 精品视频免费在线观看| 黄色视频在线免费播放| 精品无码免费看专区| 日韩欧美视频在线播放| 成人AV毛片| 五月色视频| 久久久久久久久久成人永久免费视频| 性BBwBBwBBwBBw禽| 亚洲AV永久无码精品国产精| 91久久久久国产一区二区| 亚洲中文视频| 青青草原在线视频免费观看 | 精东AV| 大香蕉伊人在线视频| 扒开让我91看片在线看| 无码毛片一区二区三区人口| 免费人成年激情视频在线观看| 亚欧在线| www.天天日| 亚洲乱码在线| 日韩欧美一| 久久青青婷婷| 久草免费在线观看视频| 久久久久久久久久久高清毛片一级 | 少妇人妻偷人精品无码视频新浪 | 亚洲国产婷婷香蕉A片| 欧美AAAAAA视频| 亚洲色色色| 国产成人秘免费观看一区二区三区| 中文字幕成人免费视频| 欧美日逼网站| 日本一级片在线播放| 人人操国产| 亚洲热热| 51妺妺嘿嘿午夜成人| 玩弄人妻少妇500系列视频| 裸体黄色一极大片| 波多野结衣av中文字幕| 韩国三级HD中文字幕2019年| 人人看人人摸人人草| 国产成人A片| 91人人妻人人澡人人爽人人精品 | 成人无码影院日韩,成人年…| 成人亚洲AV日韩AV无码| 精品蜜桃秘一区二区三区观看| 亚洲国产精品成人综合| 美日韩视频欧美一区二区视频 | 成人中文字幕在线| 女人的天堂网| 毛片在线观看视频| 日韩免费在线观看一区入口| 青青草日逼视频| 三级片久久| 不卡成人| 婷婷综合在线| 久久婷婷婬片A片AAA| 久久蜜| 国产三级无码视频| 免费看操逼视频| 九色91PORNY国产| 午夜福利片| 成人精品一区二区无码| 天天操天天拍| 7x7x7x人成免费观学生视频| 国产a片| 69av网站| 日本A片在线观看| 中文字幕国产一区| 91久久99久久91熟女精品| 日韩AV大片| 欧美老女人操逼| 成人污污视频| 成人做爰A片一区二区| 一级AA视频| 丁香六月婷婷综合| 69Av视频| 性欧美成人18| 人人妻人人玩人人澡人人爽| 神马午夜av| 欧美日韩精品在线视频| 久久这里有精品视频| 99热er| 粉嫩小泬BBBB免费看| 欧美午夜三级| 成人色视| 北条麻妃无码观看| 亚洲在线一区二区| 日韩黄色大片| www.日韩AV| 黄片网站在线观看| 豆花视频免费观看| 日本高清视频www| 成人毛片在线播放| 欧洲在线观看| 亚洲免费高清视频| 新BBWBBWBBWBBW| 精品福利在线观看| 亚洲中文字幕2019| 国产激情视频在线免费观看| 日逼逼| 精品视频中文字幕| 久久性爱网| 日韩欧美三级在线| 成人精品在线观看| 亚洲中文字幕2019| 国产色秘乱码一区二区三区| 国产亚洲日韩在线| 3D精品啪啪一区二区三区| AAA免费视频| 人妻夜夜爽天天爽| 一级操逼视频| 中文字幕永久在线视频| 亚洲成人A片| 无码中文一区| 亚洲AV成人片色在线观看麻豆 | 怡春院AV| 综合久久av| 日韩中出| 蜜臀久久精品久久久久| 日韩中文字幕在线视频| 97人人精品| 精品精品视频| 久久夜色精品国产欧美乱极品| 日本中文字幕网| 蜜桃视频在线观看18| 亚洲精品视频免费看| 亚洲美女视频在线| 亚洲欧美成人网| 91视频第一页| 天天影视综合网免费观看电视剧国产 | 人人射人人| 性生活无码视频| 国精产品一区一区三区四区| 成人超碰| 成人福利视频在线| 中文字幕视频2023| 毛片中文字幕| 俺也来俺也去WWW色| 日韩中文字幕AV| 精品码产区一区二亚洲国产| 日韩草比| 免费黄色视频网站| eeuss久久| 色色激情视频| 国产学生妹在线播放| 免费日批网站| 在线观看亚洲| 久久草大香蕉| 亚洲区一区二| 成人视频网站18| 大香蕉伊人AV| 国产农村乱婬片A片AAA图片| 97精品人妻| 91人妻人人澡人人爽人人精| 久久免费成人电影| 91AV电影| 嫩BBB槡BBBB槡BBBB视频-百度| 日韩AV网站在线观看| 五月婷婷欧美| 韩国精品在线观看| 男人的天堂婷婷| 国产第1页| 老熟妇一区二区三区啪啪| 中国熟睡妇BBwBBw| 黄网站免费观看| 国产AV日韩AV| 国产精品美女久久久久久久久| 国产精品一二三| 成人毛片100免费观看| 成人免费高清| 91欧美日韩| 在线免费看A片| 亚洲福利在线免费观看| 国产又爽又黄免费视频网站| 中文字幕23页| 久久精品女同亚洲女同13| 成人精东影业JDAV3密友| 一级在线| 国产色色网| 无码一区二区av| 91精品人妻一区二区三区蜜桃欧美| 嫩草久久99www亚洲红桃| 99er这里只有精品| 18XXX亚洲HD护士JD| 九九视频免费观看| 一区二区三区四区成人| 黄色毛片,男人天堂| 国产九九九九| 国产女人18毛片水真多成人如厕 | 激情网站免费| 黄色片在线| 麻豆亚洲AV成人无码久久精品| 啪啪网站免费看| 秋霞久久日| 一级黄色电影在线观看| 黄片视频在线| 久久久伊人网| 日日干视频| 欧美日韩中文字幕| 亚洲高清无码网站| 西西4444www大胆无吗| 日韩一页| 国产黄片免费在线观看| 欧美性爱18| 日韩人妻无码网站| 欧美激情五月| 日本AⅤ在线观看| 四川少BBB搡BBB爽爽爽| 亚洲人人妻| 欧美精品久久久久久久久老牛影院 | 日韩成人无码片| 国产欧美日韩在线| 色色爱爱| 成人亚洲综合| 亚洲国产精品18久久久久久 | 国产夫妻在线| 安徽妇搡BBBB搡BBBB| 国产做爰XXXⅩ久久久骚妇| 国产乱国产乱老熟300视频| 日日天天| 国产精品久久久久久久久夜色| 18禁一区二区| 婷婷乱伦| 迷奸91| 足浴店少妇69XXX| 操逼三级| 日韩激情一区二区| 人妻精品一区二区在线| 欧美成人无码片免费看A片秀色| 影音先锋av中文字幕| 精品av在线观看| 91美女操逼视频| 精品无码在线观看| 男女视频网站| 精品孕妇一区二区三区| 国产精品久免费的黄网站| 国产精品视频在线看| 婷婷六月天| 国产激情视频在线播放| av中文无码| 大地资源第5页在线| 中文无码人妻少妇| 欧美精产国品一二三| 午夜av在线观看| aⅴ在线| 国产91在线看| 日韩aaaa| 日韩无码不卡| 国产无码激情| 国产高清色| 欧美BBWBBWBBWBBWBBwBBW| 岛国免费视频| 五月伊人婷婷| 中文字幕三级片| 国产精品黄色电影| 97精品在线观看| 一区二区三区不卡在线| 97精产国品久久蜜桃臀| 澳门av| 九九大香蕉| 一级A片免费视频| 亚洲射图| 国产欧美岛国| 国产91在线拍揄自揄拍无码九色| 久久久18禁一区二区三区精品 | 国产极品久久久| 中文字幕免费在线看一区七区| 欧美在线一区二区| 国产成人高潮毛片| 大香蕉东京热| 丁香六月婷婷综合缴| 一级a一级a爱片兔兔软件| 2025四虎在线视频观看| 中文字幕免费在线| 国产一区二区三区免费视频| 99ri精品| 无码AV动漫| 日本AⅤ| 性欧美xxxx| 精品一区二区三区毛片| 黄色在线| 大黑鸡巴视频| 久久久久亚洲AV成人网人人软件 | 黄色欧美视频| 亚洲中文无码字幕| www.99视频| 中文字幕15页| 一级大片免费看| 男人的天堂一区| 最新毛片网站〖网:.〗| 久久99高清视频| A片在线免费观看| 97人妻在线| 人人看人人做| 精品成人A片久久久久久不卡三区 免费看成人A片无码照片88hⅤ | 精品一区二区三区毛片| 在线观看国产| 国产性爱AV| 男女日比视频| 伊人视频在线观看| 26uuu亚洲| 成人激情免费视频| 亚洲69v久久久无码精品| 欧美试看| 五月天国产视频| 中国少妇| 亚洲成人福利在线| 精品无码产区一区二| 婷婷五月中文字幕| 91爱爱视频| 免费黄色网页| 亚洲成人性爱网站| 这里只有精品在线观看| 台湾毛片| 国內精品久久久久久久| 美女裸身18禁| 三级AV在线观看| 国产精品偷拍视频| 国产精品AV网站| 日本成人午夜福利| 欧美操逼视频| 国产日韩欧美| 成人精品在线观看| 免费在线观看A片| 国产三级黄片| 午夜成人在线观看| 蜜桃视频成人app| 成人大香蕉网| AV天天看| 中文在线字幕免费观看| 免费日韩毛片| 内射熟妇| 老太婆擦BBBB撩BBBB| 久久视频免费在线观看| 色婷婷色婷婷| 99热999| 伊人久久久久久久久久久| 欧洲精品在线视频| 麻豆疯狂做受XXXX高潮视频| 色老板在线视频| 色色色色色欧美网| 韩国精品一区二区三区| 黄色视频在线观| 欧美日韩性爱网站| 青青青青青操| 国产精品一色哟哟哟| 婷婷五月天色综合| av网站导航| 人妖无码| 人妻体体内射精一区二区| 日韩中文字幕无码人妻| 成人禁区| 久久永久免费精品人妻专区| 国产AV资源| 91无码人妻一区二区三区| 一区不卡| 免费无码在线观看| 插吧插吧网| 学生妹一级J人片内射视频| 91探花在线观看| 亚洲色欲色欲www在线成人网| 国产一级网站| 国产久久免费视频| 欧美亚洲色色网视频| 日韩成人无码全裸视频| 大香蕉综合网| 欧美一级a| 五月丁香久久| 高清一区二区| 无码免费观看| 欧美无人区码suv| 思思热在线| 日本无码一区二区三三| 日韩加勒比| 国产无码自拍| 五月婷婷丁香五月| 欧美激情综合| 亚洲高清在线视频| 91人人| 国内操逼视频| 爱搞搞就要搞| 免费看无码网站成人A片| 99中文字幕| 久久精品在线观看| 天堂a中文在线| 中文字幕在线看| 在线观看A片| 日韩免费视频| 精品777| 一级黄色片视频| 操B网站| 深爱五月天| 九九热re99re6在线精品| 精品在线免费观看| 四虎激情| 色欲五月天| 久久黄色| 好叼操| 国产AV天堂| 少妇精品| 日日干干| 国产三四区久久| 高清无码色播| 韩国三级中文字幕HD久久精品| 青青娱乐亚洲无| 91九色麻豆| 蜜桃传媒在线| 内射一区二区| www.豆花社区成人| 91久九九| 无码做爱视频| 69乱伦视频| 日韩三级片在线播放| 99色婷婷| www.中文无码| 操逼中文字幕| 黄页网址在线观看| 精品国产黄色| 精品一区二区三区四区视频| 91成人一区二区三区| 日韩精品人妻中文字幕| 亚洲无码性爱| 欧美视频在线观看| 4444操| 亚洲无码三级片在线观看| 欧美综合视频在线观看| 亚洲精品18在线观看| 免费国产精品视频| 久久AA| 中文字幕99页| 波多野结衣无码网站| 黄色一级片免费看| 伊人久久大综合中文无码| 一级片学生妹| 韩国AV在线| 国产在线拍揄自揄拍无码男男| 91高潮| 欧美偷拍一区二区| 天天干天天色| 华女与黑人91A∨| 手机在线操B视频| 高清无码一级片| 国产人人爱| 狠狠躁日日躁夜夜躁A片小说免费| 亚洲精品A| 亚洲乱伦视频| 国产成人免费在线观看| 久草91| 久久久久久97电影院电影院无码| 亚洲日韩国产AV| 水果派红桃AV解说| 7x7x7x人成免费观学生视频 | 日日夜夜综合| 亚洲天堂影音先锋| 欧美第二页| 免费看成人片| 日日干天天| 亚洲色图欧美| 黄片高清无码| 人人操人人操人人| 女BBBBBB女BBB| 92自拍视频| 4438成人网站| 人妻福利导航| 操逼视频无码| 男女激情网站| 久久中文字幕电影| 天天拍夜夜爽| 精品一区二区三区四| 嫩苞又嫩又紧AV无码| 日逼黄色| 人人草人人干| 99re2| 在线观看免费a片| 欧美日韩无码视频| 五月丁香性爱| 91亚洲精品在线观看| jizz99| 国产乱伦一区| 91网站18| 日韩高清无码三级片| 亚洲精品国产精品乱玛不99| 青青操在线| 亚洲欧美高清视频| 亚洲无码一二三区| 免费电影日本黄色| 亚洲AV成人片无码网站| 99热在线观看| 国产成人小视频在线观看| 国产探花一区二区三区| 欧美3p视频| 亚洲av免费在线| 日韩人妻精品无码久久| 亚洲精品中文字幕在线| 山东乱子伦视频国产| 影音先锋av成人电影| 亚洲成色A片77777在线小说| 青春草在线观看视频| 久操久操| 青草网在线观看| 国产在线拍揄自揄拍无码男男 | avcom无码| 蜜桃无码视频小说网站| 狠狠干天天操| 成人黄色视频免费| av电影在线观看| 亚洲18禁| 黄色大片免费看| 欧美一区三区视频z| 五月天婷婷综合网| 一区二区三区久久久久〖网:.〗| 黃色一级A一片人与| 亚洲激情| 亚洲av大片| NP玩烂了公用爽灌满视频播放| www.av91| 一区二区三区国产| 92自拍视频| 黄色免费在线网站| 久久穴| 成人黄色网| 久草视频资源| 激情综合网站| 青青操逼视频| 亚洲二区后入极品| 伊人久操| 亚洲无码av电影| 国产精品乱草| 草逼的视频| 手机AV在线播放| 成人影片在线观看18| 五月婷婷丁香六月| 欧美日韩激情视频| 在线看污| 成人黄色在线观看| 躁BBB躁BBB添BBBBBB| 色婷婷影音| 猫咪AV成人永久网站| 久久一做爱| 极品久久久久| 波多野结衣亚洲视频| 日皮视频免费| 欧美大吊在线| 欧美色图俺去了| 久久久久亚洲AV无码麻豆| 欧美不卡一区| 亚洲福利一区二区| 久久群交| 精品视频免费观看| 精品国产AV| 欧美性爱a视频| 大香蕉老师| 黄频在线观看| 色色网欧美| 高清无码一级片| 九色自拍视频| 国产熟女视频| 日韩中文字幕成人| 久久国产乱子伦精品免费午夜... 国产毛片精品一区二区色欲黄A片 | 亚洲家庭乱伦| 在线免费观看毛片| 无码日韩AV| 久久久69| 免费黄色网页| 中文字幕三级片在线观看| 免费黄色av网址| 成年人免费视频网站| 婷婷五月天激情网| 久久视频这里有精品| 久久久精品免费视频| 日本不卡一区二区| 欧美性爱a视频| 撸一撸AV| 大香蕉手机视频| 18禁91| 日韩无码视频观看| 欧美级黑寡妇毛片app| 伊人婷婷久久| 亚洲无码影院| 熟女人妻人妻の视频| 国产成人a亚洲精品| 日韩精品无码电影| 国产精品7777| 狠狠躁日日躁夜夜躁A片视频| 久久久久国产一区二区三区| 中文字幕免费高清在线观看| 国产又猛又黄又爽| 波多野结衣在线无码| 91国产视频在线播放| 日韩啊啊啊| 亚洲国产中文字幕| 婷婷色情网| 国外成人性视频免费| 亚洲的天堂的αⅴ| 国产精品成人3p一区二区三区| 91亚洲精选| 91久久久无码国产一区二区三区| 久久国产精品影院| 91无码人妻精品一区二区蜜桃| 五月天丁香社区| 亚洲精品久久久久毛片A级牛奶| 亚洲无码在线播放视频| 免费看一级无码成人片| 天天日天天爱| 91蜜桃在线观看| 伊人一区| 男人v天堂| 嫩BBB揍BBB揍BBB| 91蜜桃婷婷狠狠久久综合9色| 91大吊| 91视频色| 精品国产一区二区三区性色AV| 蜜桃av无码一区三区| 国产日皮视频| 国产在线观看免费视频| 亚洲一区自拍| 先锋影音中文字幕| 國產美女AV操逼網站| 多啪啪免费视频| 欧美一级A| 欧美性爱内射| 亚洲高清无码在线免费观看|