日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

跳跃列表(Skip List)与其在Redis中的实现详解

發布時間:2024/3/24 数据库 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 跳跃列表(Skip List)与其在Redis中的实现详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 引子
  • 認識跳表
    • 跳表的提出
    • 由二叉樹回歸鏈表
    • 設計思想與查找流程
    • 插入元素的概率性
    • 復雜度分析
  • Redis的跳表實現
    • 從zset到zskiplist
    • 創建zskiplist
    • 向zskiplist插入元素
    • 查詢元素排名/獲取排名對應元素
    • Redis作者對采用跳表的解釋
  • The End

引子

跳躍列表(Skip List),簡稱跳表。在前面我寫過的一篇講解HBase MemStore的文章中曾經提到,MemStore(其實也包括BlockCache)的基礎數據結構都是JUC包提供的并發跳表ConcurrentSkipListMap。當時我就立flag說跳表是個有意思的數據結構,會寫文章專門分析它,那么今天就來兌現承諾吧。

認識跳表

跳表的提出

跳表首先由William Pugh在其1990年的論文《Skip lists: A probabilistic alternative to balanced trees》中提出。由該論文的題目可以知道兩點:

  • 跳表是概率型數據結構。
  • 跳表是用來替代平衡樹的數據結構。準確來說,是用來替代自平衡二叉查找樹(self-balancing BST)的結構。

看官可能會覺得這兩點與之前文章中講過的布隆過濾器有些相似,但實際上它們的原理和用途還是很不相同的。

由二叉樹回歸鏈表

考慮在有序序列中查找某個特定元素的情境:

  • 如果該序列用支持隨機訪問的線性結構(數組)存儲,那么我們很容易地用二分查找來做。
  • 但是考慮到增刪效率和內存擴展性,很多時候要用不支持隨機訪問的線性結構(鏈表)存儲,就只能從頭遍歷、逐個比對。
  • 作為折衷,如果用二叉樹結構(BST)存儲,就可以不靠隨機訪問特性進行二分查找了。

我們知道,普通BST插入元素越有序效率越低,最壞情況會退化回鏈表。因此很多大佬提出了自平衡BST結構,使其在任何情況下的增刪查操作都保持O(logn)的時間復雜度。自平衡BST的代表就是AVL樹、Splay樹、2-3樹及其衍生出的紅黑樹。如果推廣之,不限于二叉樹的話,我們耳熟能詳的B樹和B+樹也屬此類,常用于文件系統和數據庫。

自平衡BST顯然很香,但是它仍然有一個不那么香的點:樹的自平衡過程比較復雜,實現起來麻煩,在高并發的情況下,加鎖也會帶來可觀的overhead。如AVL樹需要LL、LR、RL、RR四種旋轉操作保持平衡,紅黑樹則需要左旋、右旋和節點變色三種操作。下面的動圖展示的就是AVL樹在插入元素時的平衡過程。

那么,有沒有簡單點的、與自平衡BST效率相近的實現方法呢?答案就是跳表,并且它簡單很多,下面就來看一看。

設計思想與查找流程

跳表就是如同下圖一樣的許多鏈表的集合。

?

跳表具有如下的性質:

  • 由多層組成,最底層為第1層,次底層為第2層,以此類推。層數不會超過一個固定的最大值Lmax。
  • 每層都是一個有頭節點的有序鏈表,第1層的鏈表包含跳表中的所有元素。
  • 如果某個元素在第k層出現,那么在第1~k-1層也必定都會出現,但會按一定的概率p在第k+1層出現。

很顯然這是一種空間換時間的思路,與索引異曲同工。第k層可以視為第k-1級索引,用來加速查找。為了避免占用空間過多,第1層之上都不存儲實際數據,只有指針(包含指向同層下一個元素的指針與同一個元素下層的指針)。

當查找元素時,會從最頂層鏈表的頭節點開始遍歷。以升序跳表為例,如果當前節點的下一個節點包含的值比目標元素值小,則繼續向右查找。如果下一個節點的值比目標值大,就轉到當前層的下一層去查找。重復向右和向下的操作,直到找到與目標值相等的元素為止。下圖中的藍色箭頭標記出了查找元素21的步驟。

通過圖示,我們也可以更加明白“跳表”這個名稱的含義,因為查找過程確實是跳躍的,比線性查找省時。若要查找在高層存在的元素(如25),步數就會變得更少。當數據量越來越大時,這種結構的優勢就更加明顯了。

插入元素的概率性

前文已經說過,跳表第k層的元素會按一定的概率p在第k+1層出現,這種概率性就是在插入過程中實現的。

當按照上述查找流程找到新元素的插入位置之后,首先將其插入第1層。至于是否要插入第2,3,4...層,就需要用隨機數等方法來確定。最通用的實現方法描述如下。

int randomizeLevel(double p, int lmax) {int level = 1;Random random = new Random();while (random.nextDouble() < p && level < lmax) {level++;}return level; }

得到層數k之后,就將新元素插入跳表的第1~k層。由上面的邏輯可知,隨著層數的增加,元素被插入高層的概率會指數級下降。

下面的動圖示出以p=1/2概率在跳表中插入元素的過程。這種方法也被叫做“拋鋼镚兒”(coin flip),直到拋出正面/反面就停止。

相對于插入而言,刪除元素沒有這么多彎彎繞,基本上就是正常的單鏈表刪除邏輯,因此不再展開。

復雜度分析

只要我們找出平均查找長度,自然就可以知道跳表的平均時間復雜度了。為了便于分析,我們將查找元素的流程反過來,從目的元素向頭節點看,也就是變成向上、向左的操作。由于隨機層數的計算是相互獨立的,因此這樣做并無妨。

假設從層數為l的某節點x出發,距離最頂層有k層。如果x有第l+1層的指針就向上走,沒有的話就向左走。它們的概率分別為p與1-p。借用William Pugh畫好的圖如下。

?

設C[k]為向上走k層要走過的路徑長度期望值,就有:C[0] = 0 ; C[k] = (1-p)·(1+C[k]) + p·(1+C[k-1]),最終可得:C[k] = k/p。

接下來設跳表中包含n個元素,那么第1層就有n個元素,第2層平均有np個,第3層平均有np2個……依次類推。可知,跳表層數的期望值為log1/pn。結合上面得出的結論,跳表的平均查找長度就是:[log1/pn - 1] / p。

也就是說,跳表增刪查的平均時間復雜度為O(logn),達到了平衡BST的水準。當然它畢竟是不穩定的,如果運氣奇差無比,總是無法建立起層級結構的話,最壞時間復雜度仍然會退化到O(n)級別,但這個概率是非常微小的了。

由上面的分析我們還可以知道,跳表中單個節點的層數為1的概率為1-p,層數為2的概率為p(1-p),層數為3的概率為p2(1-p)……依次類推。所以,單個節點層數的期望為:(1-p) · ∑[k=1→+∞](kpk-1) = 1/(1-p)。這也是單個節點中指針數量的平均值,列表如下。

可見,p越小,節點的空間開銷也就越小,但(正規化的)查找長度會相應越大。

Redis的跳表實現

跳表在很多框架中都有廣泛的應用,除Java并發包及HBase之外,比較著名的是Redis和leveldb。之前一直讀Java系的源碼,有些膩煩了,并且我最近正好在研究一些Redis調優方面的事情,就干脆拿Redis 4.0.14的源碼來講講吧。

從zset到zskiplist

跳表在Redis中稱為zskiplist,是其提供的有序集合(sorted set/zset)類型底層的數據結構之一。zset的定義如下,位于server.h中。

typedef struct zset {dict *dict;zskiplist *zsl; } zset;

可見,除了zskiplist之外,zset還使用了KV哈希表dict。Redis中有序集合的默認實現其實是更為普遍的ziplist(壓縮雙鏈表),但在redis.conf中有兩個參數可以控制它轉為zset實現。

zset-max-ziplist-entries 128 zset-max-ziplist-value 64

也就是說,當有序集合中的元素數超過zset-max-ziplist-entries時,或其中任意一個元素的數據長度超過zset-max-ziplist-value時,就由ziplist自動轉化為zset。具體邏輯參見t_zset.c中的zsetConvert()函數,不再贅述。

扯遠了,回來看看zskiplist,它的定義就在zset上面。

typedef struct zskiplistNode {robj *obj;double score;struct zskiplistNode *backward;struct zskiplistLevel {struct zskiplistNode *forward;unsigned int span;} level[]; } zskiplistNode;typedef struct zskiplist {struct zskiplistNode *header, *tail;unsigned long length;int level; } zskiplist;

zskiplist的節點定義是結構體zskiplistNode,其中有以下字段。

  • obj:存放該節點的數據。
  • score:數據對應的分數值,zset通過分數對數據升序排列。
  • backward:指向鏈表上一個節點的指針,即后向指針。
  • level[]:結構體zskiplistLevel的數組,表示跳表中的一層。每層又存放有兩個字段:
    • forward是指向鏈表下一個節點的指針,即前向指針。
    • span表示這個前向指針跳躍過了多少個節點(不包括當前節點)。

zskiplist就是跳表本身,其中有以下字段。

  • header、tail:頭指針和尾指針。
  • length:跳表的長度,不包括頭指針。
  • level:跳表的層數。

下圖示出一個length=3,level=5的zskiplist。

可見,zskiplist的第1層是個雙向鏈表,其他層仍然是單向鏈表,這樣做是為了方便可能的逆向獲取數據的需求。

另外,節點中還會保存前向指針跳過的節點數span,這是因為zset本身支持基于排名的操作,如zrevrank指令(由數據查詢排名)、zrevrange指令(由排名范圍查詢數據)等。如果有span值的話,就可以方便地在查找過程中累積出排名了。

以上是zskiplist相對于前述的傳統跳表的兩點不同,并且都給我們帶來了便利。下面我們來繼續讀代碼,看看它的部分具體操作。

創建zskiplist

zslCreate()函數位于t_zset.c中。

zskiplist *zslCreate(void) {int j;zskiplist *zsl;zsl = zmalloc(sizeof(*zsl));zsl->level = 1;zsl->length = 0;zsl->header = zslCreateNode(ZSKIPLIST_MAXLEVEL,0,NULL);for (j = 0; j < ZSKIPLIST_MAXLEVEL; j++) {zsl->header->level[j].forward = NULL;zsl->header->level[j].span = 0;}zsl->header->backward = NULL;zsl->tail = NULL;return zsl; }

并不難懂,唯一需要注意的是常量ZSKIPLIST_MAXLEVEL,它定義了zskiplist的最大層數,值為32,這也是上節圖中的節點最高只到L32的原因。

向zskiplist插入元素

插入元素靠的是zslInsert()函數,有點長。

zskiplistNode *zslInsert(zskiplist *zsl, double score, robj *obj) {zskiplistNode *update[ZSKIPLIST_MAXLEVEL], *x;unsigned int rank[ZSKIPLIST_MAXLEVEL];int i, level;serverAssert(!isnan(score));x = zsl->header;for (i = zsl->level-1; i >= 0; i--) {rank[i] = i == (zsl->level-1) ? 0 : rank[i+1];while (x->level[i].forward &&(x->level[i].forward->score < score ||(x->level[i].forward->score == score &&compareStringObjects(x->level[i].forward->obj,obj) < 0))) {rank[i] += x->level[i].span;x = x->level[i].forward;}update[i] = x;}level = zslRandomLevel();if (level > zsl->level) {for (i = zsl->level; i < level; i++) {rank[i] = 0;update[i] = zsl->header;update[i]->level[i].span = zsl->length;}zsl->level = level;}x = zslCreateNode(level,score,obj);for (i = 0; i < level; i++) {x->level[i].forward = update[i]->level[i].forward;update[i]->level[i].forward = x;x->level[i].span = update[i]->level[i].span - (rank[0] - rank[i]);update[i]->level[i].span = (rank[0] - rank[i]) + 1;}for (i = level; i < zsl->level; i++) {update[i]->level[i].span++;}x->backward = (update[0] == zsl->header) ? NULL : update[0];if (x->level[0].forward)x->level[0].forward->backward = x;elsezsl->tail = x;zsl->length++;return x; }

該方法涉及到的細節很多,其大致執行流程如下:

  • 按照前面講過的查找流程,找到合適的插入位置。注意zset允許分數score相同,這時會根據節點數據obj的字典序來排序。
  • 調用zslRandomLevel()方法,隨機出要插入的節點的層數。
  • 調用zslCreateNode()方法,根據層數level、分數score和數據obj創建出新節點。
  • 每層遍歷,修改新節點以及其前后節點的前向指針forward和跳躍長度span,也要更新最底層的后向指針backward。

其中維護了兩個數組update和rank。update數組用來記錄每一層的最后一個分數小于待插入score的節點,也就是插入位置。rank數組用來記錄上述插入位置的上一個節點的排名,以便于最后更新span值。

隨機計算層數的zslRandomLevel()方法如下。

int zslRandomLevel(void) {int level = 1;while ((random()&0xFFFF) < (ZSKIPLIST_P * 0xFFFF))level += 1;return (level<ZSKIPLIST_MAXLEVEL) ? level : ZSKIPLIST_MAXLEVEL; }

注意p值由ZSKIPLIST_P常量定義,值為0.25,即被插入到高層的概率為1/4。

下圖示出插入元素的流程。

?

查詢元素排名/獲取排名對應元素

從zslGetRank()和zslGetElementByRank()這兩個函數可以更明顯地看出通過累積span字段的值獲取到排名的操作。代碼本身比較容易理解,如下所示。

unsigned long zslGetRank(zskiplist *zsl, double score, robj *o) {zskiplistNode *x;unsigned long rank = 0;int i;x = zsl->header;for (i = zsl->level-1; i >= 0; i--) {while (x->level[i].forward &&(x->level[i].forward->score < score ||(x->level[i].forward->score == score &&compareStringObjects(x->level[i].forward->obj,o) <= 0))) {rank += x->level[i].span;x = x->level[i].forward;}if (x->obj && equalStringObjects(x->obj,o)) {return rank;}}return 0; }zskiplistNode* zslGetElementByRank(zskiplist *zsl, unsigned long rank) {zskiplistNode *x;unsigned long traversed = 0;int i;x = zsl->header;for (i = zsl->level-1; i >= 0; i--) {while (x->level[i].forward && (traversed + x->level[i].span) <= rank){traversed += x->level[i].span;x = x->level[i].forward;}if (traversed == rank) {return x;}}return NULL; }

Redis作者對采用跳表的解釋

比起我多費口舌,不如來看看Salvatore Sanfillipo(@antirez)本人說的話。他多年之前在Hacker News的一篇帖子上解釋了自己為什么要在Redis中用跳表而不是樹,原文如下,淺顯易懂,就不翻譯了:

  • They are not very memory intensive. It's up to you basically. Changing parameters about the probability of a node to have a given number of levels will make then less memory intensive than btrees.
  • A sorted set is often target of many ZRANGE or ZREVRANGE operations, that is, traversing the skip list as a linked list. With this operation the cache locality of skip lists is at least as good as with other kind of balanced trees.
  • They are simpler to implement, debug, and so forth. For instance thanks to the skip list simplicity I received a patch (already in Redis master) with augmented skip lists implementing ZRANK in O(log(N)). It required little changes to the code.
  • 總結

    以上是生活随笔為你收集整理的跳跃列表(Skip List)与其在Redis中的实现详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产综合小视频 | 99久久夜色精品国产亚洲96 | 久久午夜色播影院免费高清 | 日韩视频在线观看视频 | 国产一区二区精品久久 | 日韩网站在线观看 | 成人在线视频免费观看 | 久久久免费观看完整版 | 久草在线最新 | 亚洲国产三级在线 | 伊人永久 | 久久久一本精品99久久精品66 | 一区二区三区日韩在线 | 激情av综合 | 国产二级视频 | 五月综合网 | 91喷水| 亚洲成人资源在线观看 | 久草在线免费在线观看 | 日韩一级电影网站 | 久久免费电影网 | 国产精品久久久久久久久久新婚 | 91探花在线视频 | 91人人射| 中国一级片在线观看 | 日韩成人精品一区二区三区 | 欧美久久99| 午夜在线国产 | 99久久精品国产欧美主题曲 | 国产精品久久久久一区二区三区 | 亚洲一区二区高潮无套美女 | 久久国产色 | www.五月天色 | 狠狠狠狠狠狠天天爱 | 国内精品久久天天躁人人爽 | 一区二区精品国产 | 亚洲成人影音 | 成年人免费看 | 色午夜 | 国产精品一区久久久久 | 国产精品美女www爽爽爽视频 | 日韩欧美一区二区三区免费观看 | 精品久久久999 | 草久在线视频 | 日韩av在线看 | 婷婷六月天丁香 | 午夜精品一区二区国产 | 久久午夜精品影院一区 | 国产亚洲精品久久网站 | 亚洲永久国产精品 | 超碰在线天天 | 国产亚洲日 | 香蕉一区| 亚洲劲爆av| 欧美日韩精品在线免费观看 | 亚洲涩综合 | 2019av在线视频 | 在线国产精品一区 | 亚洲做受高潮欧美裸体 | 中文字幕高清视频 | 亚洲男人天堂2018 | 99精品视频免费观看 | 一区二区不卡视频在线观看 | 久久这里有精品 | 69欧美视频 | 三日本三级少妇三级99 | 免费在线一区二区三区 | 二区视频在线观看 | 久草视频在线新免费 | 欧美一级特黄aaaaaa大片在线观看 | 亚洲天堂网在线视频 | 久久艹综合 | 久久人人爽人人爽人人片av免费 | 久草网站在线 | 久久久久久免费视频 | 91av福利视频| 在线视频一区二区 | 在线免费观看视频 | 超碰人人射 | 99国产一区 | 96视频在线 | 亚洲成人免费观看 | 国产高清久久久久 | www91在线| 日韩精品视频在线观看网址 | 在线观看成人小视频 | 午夜精品剧场 | 国产精品青青 | 91一区啪爱嗯打偷拍欧美 | 97品白浆高清久久久久久 | 四虎影视精品永久在线观看 | 中文字幕在线观看第三页 | 永久免费的啪啪网站免费观看浪潮 | 国产一二三区在线观看 | 欧美激情视频一区 | 国产精品毛片一区视频 | 亚洲日日射 | 99久久精品免费看国产四区 | 六月丁香激情综合 | 天天草夜夜 | 国产91在| 一级一级一片免费 | 久久人人看 | 在线看免费 | 国产黄色精品视频 | 久久综合色影院 | 国产精品视频免费观看 | 在线观看中文字幕dvd播放 | 亚洲精品视频久久 | 在线免费黄色av | 日本爱爱免费 | 国产亚洲视频在线免费观看 | 亚洲三级国产 | 91传媒91久久久 | 国产精品九九视频 | 日韩视频免费观看高清完整版在线 | 99r在线 | 伊人伊成久久人综合网站 | 免费成人短视频 | 五月婷婷丁香网 | 欧美一级视频免费看 | 狂野欧美激情性xxxx | 天天综合精品 | 国产精品一级视频 | 亚洲精品女 | 99久久99久久精品国产片果冰 | 国产精品99爱 | 国产中文字幕视频 | 精品99在线视频 | 91x色 | 在线黄色毛片 | 精品国产诱惑 | 天天玩天天干天天操 | 色播激情五月 | 久久久久久国产精品亚洲78 | 少妇性色午夜淫片aaaze | 久久精品国产亚洲aⅴ | 91av网址| 日日插日日干 | 手机av观看 | www.亚洲激情.com | 国产精品久久久久国产精品日日 | 亚洲综合视频在线播放 | 人人爱人人射 | 激情影音先锋 | 国产 日韩 在线 亚洲 字幕 中文 | 国产福利一区二区三区视频 | 国产精品99久久久久久久久久久久 | 欧美91精品国产自产 | 亚洲少妇影院 | 2019国产精品| 欧美韩日精品 | 激情丁香5月 | 在线观看香蕉视频 | 日韩精品视频在线观看免费 | 免费观看特级毛片 | 开心激情久久 | 97国产一区二区 | 国产无遮挡又黄又爽馒头漫画 | www.狠狠操.com| 国产剧情在线一区 | 国产日产高清dvd碟片 | 日韩欧美一区二区在线观看 | 在线视频你懂 | 国产一区二区日本 | 中文字幕乱视频 | 粉嫩高清一区二区三区 | 天堂久色 | 国产午夜精品一区二区三区四区 | 91色九色 | 欧美久久久久久久久久久久久 | 国产精品成人a免费观看 | 91av在线视频免费观看 | 国产在线精 | 久草在线视频首页 | 超碰99在线| va视频在线观看 | 亚洲精品国产欧美在线观看 | 99精品在线播放 | 欧美一区在线看 | 国产精品每日更新 | 久久看毛片 | 91免费版在线观看 | 伊人五月天婷婷 | 久久99精品久久久久久秒播蜜臀 | 92av视频| 欧美一级艳片视频免费观看 | 五月网婷婷| 国产在线a免费观看 | 久久久久黄| 色婷婷亚洲婷婷 | 久久国产精品一国产精品 | 开心激情综合网 | 久久天天躁夜夜躁狠狠85麻豆 | 国产精品成人一区二区 | 99久久综合精品五月天 | 国产精品美女久久久网av | 午夜精品一区二区三区在线视频 | 国产v在线| 国产亚洲精品久 | 色五婷婷| 久久99精品国产麻豆宅宅 | 久久精品系列 | 九九热在线视频免费观看 | 日韩经典一区二区三区 | 五月天免费网站 | 九九热精 | 在线视频麻豆 | 久久一线| 国产精品v a免费视频 | 天天色视频 | 亚洲少妇xxxx | 99tvdz@gmail.com | 天天摸天天操天天舔 | 在线观看国产高清视频 | 日韩久久片| 久久影视中文字幕 | 久久久久久久久精 | 成人性生交大片免费看中文网站 | 18性欧美xxxⅹ性满足 | 天天操天天操天天操天天 | 99久久精品国产欧美主题曲 | 国产日韩精品一区二区三区在线 | 91免费高清观看 | 亚洲欧美视屏 | 欧美日本国产在线观看 | 成人黄色电影在线播放 | 免费观看国产精品 | 欧美淫aaa免费观看 日韩激情免费视频 | 日韩精品在线看 | 久久免费视频在线 | 在线成人一区 | 国产亚洲精品久久久久久 | av免费在线观看1 | 亚洲国产精品99久久久久久久久 | 91激情| 欧美另类69| 人人草人 | 亚洲视频,欧洲视频 | 亚洲免费av网站 | 亚洲视屏在线播放 | 日本中文字幕网 | 日韩精品不卡在线 | 久久国产欧美日韩 | 亚洲特级毛片 | 99久久精品日本一区二区免费 | 欧美激情精品久久 | 丁香激情综合久久伊人久久 | 国产原创在线视频 | 久久国产精品久久精品 | 欧美三人交 | 蜜桃视频成人在线观看 | 欧美亚洲精品在线观看 | 日韩欧美高清一区二区三区 | 天天操天天操天天 | 最新日韩视频 | 久久免费av | 日日操夜夜操狠狠操 | 视频国产| 久久美女免费视频 | av高清网站在线观看 | 91热视频在线观看 | 免费电影一区二区三区 | 91九色丨porny丨丰满6 | 色午夜影院 | 美女久久一区 | 欧美日韩国产精品一区二区 | 91精品久久久久久久久 | 久久国产电影 | 日韩在线观看一区 | 色综合天天做天天爱 | 四虎国产精品成人免费影视 | 99在线热播 | 免费看片网页 | 成人一区二区在线 | 天天操天天添天天吹 | 国产在线观看,日本 | 久久精品草 | 国产高清永久免费 | 亚洲三区在线 | 久草在线视频看看 | 国产精品久久久久久久久久新婚 | 亚洲精选在线 | 婷婷中文字幕在线观看 | 久久久午夜影院 | 97狠狠操 | 97超碰人人干| 丁香激情综合国产 | 黄色成品视频 | 国产日产欧美在线观看 | 日一日操一操 | 最新日本中文字幕 | 丁香六月在线观看 | 一区二区三区四区精品视频 | 午夜性色 | 中文字幕在线精品 | 天天天干天天射天天天操 | 麻豆视频www | 亚洲欧美日韩一区二区三区在线观看 | 国产亚洲日本 | 精品黄色片 | 亚洲成人av在线播放 | 国内精品久久久精品电影院 | 国产成人在线观看 | 日韩在线二区 | 日韩网站一区二区 | 天天狠狠干 | 一本一道久久a久久综合蜜桃 | 日日摸日日爽 | 亚州精品天堂中文字幕 | 91麻豆精品91久久久久同性 | 精品久久久免费 | 午夜色性片| 在线日韩一区 | 天天色天天草天天射 | 一级黄色av | 综合网久久 | www.伊人色.com | 日韩av网页| 在线观看视频精品 | 久久99精品久久久久久久久久久久 | 中文字幕资源网在线观看 | 国产精品嫩草55av | 2019中文最近的2019中文在线 | 久久久久久免费视频 | 免费在线观看一区二区三区 | 国内精品久久久久久久久久久 | 伊人色综合久久天天网 | 午夜久久久精品 | 中文字幕 国产精品 | 中文在线字幕免 | 日韩在线一二三区 | 久日视频| 狠狠撸电影 | 在线91av| 国产欧美日韩精品一区二区免费 | 久久国产香蕉视频 | 草久久影院 | 国产一级a毛片视频爆浆 | 久久在线免费 | 午夜久久福利 | 91精品久久久久久久99蜜桃 | 97超视频在线观看 | 日韩高清一 | 在线视频国产区 | 国产精品久久久久久久午夜片 | 日本在线视频一区二区三区 | 国产精品自产拍在线观看桃花 | 999成人精品 | 国产在线精品一区二区 | 国产精品久久久久久爽爽爽 | 免费a级大片 | 日日夜夜天天射 | 999久久a精品合区久久久 | 91在线观看欧美日韩 | 久日精品| 91成人在线观看高潮 | 国产精品成人一区二区 | 久久国产精品久久精品国产演员表 | 十八岁以下禁止观看的1000个网站 | 美女视频黄免费网站 | 97超视频在线观看 | 国产h片在线观看 | 国际精品久久久 | 亚洲精品一区二区在线观看 | 国产 在线 高清 精品 | 日韩在线观看你懂得 | 久久免费毛片视频 | 国产视| 精品婷婷 | 在线观看黄色大片 | 天天干天天射天天操 | 国产免费不卡 | 黄色小说视频在线 | 免费99精品国产自在在线 | 国产成人精品av | www.91成人 | 97超碰人人澡| 国产96在线观看 | 人人爽人人舔 | 欧美一区成人 | 国产一区国产二区在线观看 | 午夜精品av | 999在线精品| 一级黄色在线视频 | 97在线观看视频免费 | 米奇影视7777 | 日本精品视频一区二区 | 日韩激情一二三区 | 日韩高清观看 | 色吊丝av中文字幕 | 久久精品国产亚洲aⅴ | 欧美色道| 久久美女视频 | 在线看成人 | 亚洲日韩欧美一区二区在线 | 免费在线观看一区二区三区 | 日韩成人免费在线 | 成人国产精品久久久久久亚洲 | 超碰在线中文字幕 | 久久九九久久精品 | 久久久不卡影院 | 婷婷色站 | 午夜美女网站 | 伊人亚洲综合 | 在线 影视 一区 | 人人澡超碰碰97碰碰碰软件 | 久久久久成人免费 | 97色在线视频| 精品久久99 | 天天爽天天爽夜夜爽 | 国产手机在线精品 | 色多多视频在线观看 | 97成人在线免费视频 | 最新日韩在线观看视频 | 国产精品久久人 | 亚洲国产成人av网 | 亚洲三级在线免费观看 | 国产三级视频 | 亚洲精品久久久久999中文字幕 | 久草在线免费播放 | 亚洲精品日韩在线观看 | 欧美成人黄| 亚洲成av人片在线观看香蕉 | 欧美一级电影片 | 国产一区欧美日韩 | 日韩av成人在线 | 精品久久久久久久久中文字幕 | 夜夜骑日日 | 久久在线精品 | 天天操天天爱天天干 | 中日韩在线视频 | 亚洲精品短视频 | 欧美日韩国产一区二区三区 | 亚洲国产精品成人av | 99精品毛片| 免费黄色网址网站 | 亚洲一区欧美精品 | 日本激情视频中文字幕 | 亚洲精品66 | 丁五月婷婷 | 亚洲精品自拍 | 国产精品永久久久久久久久久 | 久久人人爽人人爽人人片 | 六月丁香婷婷久久 | 国内精品视频免费 | 亚洲精品1234区 | 成年人免费在线观看网站 | 国产手机在线视频 | 麻豆国产露脸在线观看 | 日韩欧美在线中文字幕 | www视频免费在线观看 | 日韩久久激情 | 五月av在线 | 五月网婷婷 | 久久综合九色99 | 亚洲日本va午夜在线电影 | 久久在线观看 | 精品国产一二三四区 | 人人射人人射 | 久久精品国产一区二区 | 久久国产视屏 | 国产成人精品福利 | 波多野结衣一区三区 | 波多野结衣一区二区 | 久久久久综合精品福利啪啪 | 久久五月天婷婷 | 碰超在线观看 | 最近日本韩国中文字幕 | 久久一级电影 | 岛国av在线 | 日本性xxxxx 亚洲精品午夜久久久 | 久久综合视频网 | 亚洲乱码精品久久久 | 在线观看免费国产小视频 | 亚洲在线高清 | 欧美ⅹxxxxxx | 超碰97中文| 久久成人免费电影 | 在线亚洲欧美视频 | 色婷婷97| 一区二区三区四区精品 | 一区二区视频电影在线观看 | 欧美精品在线视频 | 热久久视久久精品18亚洲精品 | 韩国精品在线 | 亚洲成年人免费网站 | 97成人资源站 | 日韩在线观看小视频 | 亚洲精品国产精品乱码不99热 | 亚洲综合色视频在线观看 | 日韩国产欧美在线视频 | 久久视频精品在线 | 亚洲精品国 | 在线观看日韩一区 | 91视频久久久久 | 免费国产在线精品 | 激情综合五月网 | 亚洲午夜久久久影院 | 久草在线精品观看 | 亚洲一区日韩精品 | 亚洲更新最快 | 日本精品中文字幕在线观看 | 国产成人久久精品亚洲 | 国产视频不卡一区 | 日韩xxxx视频 | 久草在线资源网 | 欧美日韩亚洲在线 | 天天爱天天射天天干天天 | www.超碰| 视频直播国产精品 | 欧美另类z0zx| 亚洲精品一区二区三区新线路 | 亚洲香蕉视频 | 97精品国产97久久久久久粉红 | 国产91区| www.色婷婷 | 在线亚洲精品 | 国产毛片久久久 | 婷婷色六月天 | 日本黄色免费电影网站 | 美女视频永久黄网站免费观看国产 | 国产视频色 | 亚洲欧美日韩国产一区二区三区 | 在线视频 一区二区 | 蜜臀91丨九色丨蝌蚪老版 | 国产精品免费观看在线 | 久久精品99视频 | 国产精品伦一区二区三区视频 | 色噜噜色噜噜 | 色网av| 国产亚洲精品久久久久久网站 | 中文字幕在线观看播放 | 日韩高清www| 国产色秀视频 | 成人一区在线观看 | 免费日韩一区二区三区 | 欧美日韩久久 | 精品国产诱惑 | 人人搞人人干 | 日韩在线三级 | 亚洲精品在线观看中文字幕 | av大片网址 | 国模精品一区二区三区 | 97超碰在线资源 | 有码一区二区三区 | 免费午夜在线视频 | 亚洲网久久 | 色久天 | 精品在线观看国产 | 99日韩精品 | 最近久乱中文字幕 | 日本字幕网 | 色老板在线| 国产精品女同一区二区三区久久夜 | 国产色视频一区二区三区qq号 | 日韩午夜视频在线观看 | 日韩资源在线 | 亚洲三级黄色 | 九九九免费视频 | 天天色天天艹 | 免费福利在线观看 | www久久99 | 麻豆一区在线观看 | 久久天堂影院 | 久久99欧美| 日韩三级精品 | 久久综合99| 日韩精品最新在线观看 | 日韩视频一区二区在线 | 人人爽人人爱 | 国产亚洲高清视频 | 欧美精选一区二区三区 | 最新婷婷色| 日韩色综合网 | 亚洲精品在线一区二区三区 | 精品欧美一区二区三区久久久 | 国产精品第72页 | 麻豆传媒视频在线 | 久久久久欧美精品999 | 中文字幕第一页在线播放 | 日韩美视频 | 97人人澡人人爽人人模亚洲 | 中文字幕xxxx | 99久久精品国产一区二区成人 | 久久爱www. | 月下香电影 | av在线短片| 久久精品首页 | 国产精品久久视频 | 日本中出在线观看 | 99久久久久久国产精品 | 在线性视频日韩欧美 | 在线观看成人小视频 | 一级黄色大片在线观看 | 人人干人人超 | 欧美 激情 国产 91 在线 | 免费观看的黄色片 | 亚洲精品在线观看中文字幕 | 日日夜夜免费精品视频 | 韩日精品在线 | 亚洲精品免费视频 | 91亚洲成人| 九九九九九九精品任你躁 | 精品国产免费一区二区三区五区 | 日日夜夜狠狠 | 三级黄色片在线观看 | 天天爱天天射天天干天天 | 欧美成年人在线观看 | 免费色视频在线 | 成人三级视频 | a在线播放 | 黄色小网站在线观看 | 麻豆视频免费在线 | 在线观看免费av片 | 人人看人人艹 | 国产精品美女视频网站 | 香蕉影院在线播放 | 在线成人观看 | 国产精品国产三级国产专区53 | 亚洲成人精品在线观看 | 国产最新在线观看 | 一区二区视频在线观看免费 | 欧美精品一二 | 最新超碰| 久久精品一区二区三区四区 | 美女黄网久久 | 五月天丁香综合 | 黄色亚洲 | 亚洲视频,欧洲视频 | 在线播放亚洲激情 | 午夜视频免费 | 午夜精品一区二区三区可下载 | 三级黄色网络 | 精品人妖videos欧美人妖 | 色婷婷综合久久久中文字幕 | 亚洲欧美日韩在线看 | 久久国产一区二区三区 | 久章操 | 亚洲精品理论 | www色com| 99爱在线 | 91激情视频在线 | 亚洲乱码国产乱码精品天美传媒 | 国产精品3区 | 免费网站v | 亚洲午夜电影网 | 国产91av视频在线观看 | 伊人天天狠天天添日日拍 | 亚洲 综合 精品 | 亚洲精品网址在线观看 | 中文字幕 国产视频 | 在线 高清 中文字幕 | 91高清视频免费 | 天天干天天干天天干天天干天天干天天干 | www视频在线免费观看 | 日韩黄色一区 | 久久精品一级片 | 99久久99久久精品国产片果冰 | 99 视频 高清 | 国产精品色婷婷 | 成年一级片 | 亚洲一二视频 | 中文字幕乱在线伦视频中文字幕乱码在线 | 成人av免费在线 | 九九天堂 | 久久久久久久久亚洲精品 | 97视频人人| 国产女人免费看a级丨片 | 国产色久 | 色噜噜在线观看视频 | 9999国产精品 | 中文字幕在线观看第二页 | 久久一区二区三区超碰国产精品 | 黄色国产区 | 国内精品久久久久久久影视简单 | 日韩在线观看一区二区 | 香蕉在线视频播放网站 | 少妇性aaaaaaaaa视频 | 中文字幕亚洲国产 | 日日夜夜综合 | 二区在线播放 | 天天干天天射天天爽 | 激情综合色图 | 伊人av综合 | 久久免费播放视频 | 亚洲欧美视频在线 | 国产日韩精品久久 | 久久99爱视频 | 天天做天天干 | 国产精品久久久久久久久久三级 | 99激情网| 久久成人国产精品 | 中文字幕亚洲精品日韩 | 91自拍视频在线 | 国产精品久久久久久久久久久久午夜片 | 中文字幕乱码亚洲精品一区 | 亚洲va天堂va欧美ⅴa在线 | 婷婷久久精品 | 欧美人操人 | 手机在线免费av | 亚洲h色精品 | 亚洲精品视频中文字幕 | 中文字幕网站视频在线 | 亚洲影视九九影院在线观看 | 亚洲精品乱码久久久久v最新版 | 国产黄色av影视 | 中文字幕在线观看一区二区 | 国产日女人 | 免费成人av在线 | 91福利国产在线观看 | 欧美日韩国产二区三区 | 草莓视频在线观看免费观看 | 精品久久久久久久久久久久久久久久久久 | 日韩黄色一级电影 | 91天天视频 | 91久久爱热色涩涩 | 日韩三级在线 | 久久国产精品99久久久久久丝袜 | 久久久久久久国产精品影院 | av电影免费在线看 | 国产日本亚洲 | 国产资源站 | 激情五月综合网 | 97视频在线看 | 五月婷影院 | 亚洲精品ww | 美女免费黄视频网站 | av蜜桃在线| 狠狠操天天射 | 成人免费视频网站 | 97精品久久人人爽人人爽 | 国产精品一区二区三区久久 | 日韩高清 一区 | 亚洲一区黄色 | 免费福利在线观看 | 欧美999| 黄www在线观看 | 日韩二区精品 | 麻豆免费视频网站 | 亚洲更新最快 | 国产精品色在线 | 黄色毛片网站在线观看 | 欧美日韩高清一区二区三区 | 在线视频欧美精品 | 久久久久久久久久久国产精品 | 蜜臀久久99精品久久久久久网站 | 国产福利午夜 | 色综合久久久网 | 日韩欧美xxx | 欧美成人h版在线观看 | 久久精品这里热有精品 | 人人搞人人干 | 国产成人精品久久久久蜜臀 | 在线看的av网站 | 日韩经典一区二区三区 | 成人a级网站 | 福利在线看片 | 中文字幕亚洲精品日韩 | av中文在线观看 | 一级黄色片网站 | 欧美国产精品一区二区 | 久久视频一区二区 | 中文字幕在线播放第一页 | 91av在线免费播放 | 在线视频成人 | 综合久色 | 欧美日本在线观看视频 | 久久成人国产精品入口 | 国产精品欧美久久久久久 | 午夜视频导航 | 一区 二区电影免费在线观看 | 久久99精品久久久久久三级 | 深夜免费网站 | 欧美成人999| 精品少妇一区二区三区在线 | 成人全视频免费观看在线看 | 亚州免费视频 | 国产伦精品一区二区三区四区视频 | 国产色道 | 91pony九色丨交换 | 黄色免费网站下载 | 麻豆成人在线观看 | 久久国产精品一区二区 | 精品国产乱码一区二区三区在线 | 天天干视频在线 | 成人av电影免费在线播放 | 亚洲国产精品一区二区尤物区 | 人人涩 | 黄色网址中文字幕 | 在线观看中文字幕 | 欧美一级爽 | 日本中文字幕在线看 | 国产视频中文字幕在线观看 | 国产亚洲成人网 | 最新不卡av| 精品视频成人 | 国产精品激情在线观看 | 国产麻豆精品在线观看 | 国产一区二区不卡在线 | 免费av电影网站 | 在线观看成人小视频 | 亚洲成av人片一区二区梦乃 | 在线天堂中文www视软件 | 亚洲另类视频在线观看 | av在线不卡观看 | 日韩电影精品一区 | 亚洲欧美综合精品久久成人 | 天天操天天添 | 成人免费电影 | 国产精品久久久区三区天天噜 | 亚洲一区日韩精品 | 成年人av在线播放 | 国产91精品看黄网站在线观看动漫 | 午夜视频黄 | 亚洲专区免费观看 | 亚洲欧美国内爽妇网 | 美女视频黄免费的久久 | 五月天久久久久久 | 日韩精品视频在线免费观看 | 国产精品2018 | 日韩三区在线观看 | 97色视频在线| 五月天欧美精品 | 91亚洲精品久久久久图片蜜桃 | 国产成人福利 | 亚洲aⅴ在线观看 | 永久免费精品视频网站 | 91九色综合 | 亚洲精品在线免费 | 天天在线免费视频 | 草免费视频 | 国产v视频| 天天综合导航 | 偷拍区另类综合在线 | 99视频在线免费播放 | 精品久久久久久亚洲综合网站 | 久久综合狠狠综合久久狠狠色综合 | 日韩免费一级电影 | 在线看片91 | 视频一区二区三区视频 | 国产一区在线免费观看 | 999成人| 一级欧美一级日韩 | 中文字幕在线观看三区 | 免费观看mv大片高清 | 国产一区二区在线看 | 正在播放一区二区 | 91色影院| 亚洲综合色视频 | 91丨九色丨勾搭 | 一区二区三区在线观看免费视频 | 91免费观看网站 | 毛片播放网站 | 亚洲国产精品一区二区尤物区 | 亚洲综合网 | 三日本三级少妇三级99 | 成人午夜精品福利免费 | 激情欧美国产 | 亚洲91中文字幕无线码三区 | 91激情视频在线观看 | 日韩精品一区二区三区不卡 | 亚洲视频,欧洲视频 | 日韩欧美在线视频一区二区三区 | 国产亚洲婷婷免费 | 在线视频观看91 | 久久精品之 | 91av影视| 欧美日韩免费在线视频 | 久久久久久美女 | 国产亚洲欧美日韩高清 | 一级a性色生活片久久毛片波多野 | 中文字幕免费不卡视频 | 日韩精品国产一区 | 正在播放国产精品 | 奇米7777狠狠狠琪琪视频 | 日本一区二区免费在线观看 | 在线观看的av网站 | 性色av免费观看 | 黄色大片日本免费大片 | 97品白浆高清久久久久久 | 四虎国产精品成人免费影视 | 永久免费精品视频 | 欧美资源在线观看 | 亚州精品天堂中文字幕 | 久久99国产精品二区护士 | 狠狠狠狠狠狠干 | 国产精品久久久久久久久久久久午夜 | a特级毛片| 九九热免费在线视频 | 欧美色图30p | 香蕉影视app | 精品v亚洲v欧美v高清v | 国产乱视频 | 亚洲开心激情 | 国产精品九九久久99视频 | 色 免费观看 | 狠狠干免费 | 欧美日韩国产一区二区在线观看 | 午夜精品在线看 | 久久综合久久综合久久综合 | 日韩欧美高清在线观看 | 国产一级在线播放 | 免费高清男女打扑克视频 | 国产在线观看高清视频 | 久久99久久精品国产 | 久久免费视频网 | 综合色中色 | 久久精品日本啪啪涩涩 | 五月天av在线 | aa级黄色大片 | 人人爽爽人人 | 中文字幕首页 | 蜜桃视频日本 | 三级黄色片子 | 91看片成人 | 高清有码中文字幕 | 国产乱老熟视频网88av | 精品视频一区在线 | 中文字幕一区二区三 | 一级成人免费 | 麻豆综合网| 久久精品视频在线 | 国产成人精品一区二 | 国产专区视频在线 | 精品v亚洲v欧美v高清v | 日韩高清一区 | 久久免费成人 | 国产91aaa| 日韩电影精品一区 | 欧美黑人性猛交 | 91精品国产乱码久久桃 | 在线看日韩 | 久久精品国产免费观看 | 久久中文欧美 | 色综合在| 久草免费在线视频 | 日韩高清无线码2023 | 久久国产精品久久w女人spa | 亚洲精品午夜久久久久久久 | 国产精品不卡在线观看 | 黄色片免费电影 | 天天天在线综合网 | 国产精品第三页 | 日韩免费在线观看视频 | 亚洲日韩精品欧美一区二区 | 91成人精品一区在线播放 | 亚洲成人中文在线 | www操操操 | 成人精品999 | 中文字幕欧美日韩va免费视频 | 色噜噜日韩精品欧美一区二区 | 奇米导航 | 中文字幕乱码一区二区 | 亚洲理论在线观看 | 精品一区二区在线免费观看 | 日本动漫做毛片一区二区 | 69国产在线观看 | 久久精品国产成人精品 | 麻豆国产网站入口 | 久久久久黄 | 久久少妇| 久久国产精品99精国产 | 日日摸日日添日日躁av | 国产精品亚州 | 精品国产一区二区三区久久久蜜月 | 欧美一级电影免费观看 | www.av免费| 国产女人18毛片水真多18精品 | 国产一二三四在线视频 | 激情综合啪 | 日本巨乳在线 | 久久久久久久久久影视 | 一区二区不卡高清 | 亚洲爽爽网 | 亚洲美女视频在线观看 | 日韩特级片 | 日本中文字幕久久 | 波多野结衣在线观看一区 | www.久久久精品 | 中文字幕最新精品 | 三级黄色a| 黄色精品在线看 | 亚洲国产欧美一区二区三区丁香婷 | 欧美在线视频一区二区 | 狠狠色丁香婷婷综合欧美 | 午夜精品剧场 | 成人午夜黄色影院 | 免费a级黄色毛片 | 中文字幕人成一区 | 国产婷婷精品av在线 | 日韩高清免费观看 | 国产成人精品女人久久久 | 欧美aaaxxxx做受视频 | 免费黄色a级毛片 | 国产视频精品免费 | 国产精品99久久久精品免费观看 | 人人爽影院 |