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

歡迎訪問 生活随笔!

生活随笔

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

数据库

Redis源码解析:07压缩列表

發布時間:2025/3/14 数据库 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis源码解析:07压缩列表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 壓縮列表(ziplist)是列表鍵和哈希鍵的底層實現之一。當列表鍵只包含少量列表項,并且每個列表項要么是小整數值,要么是長度較短的字符串時;或者當哈希鍵只包含少量鍵值對,并且每個鍵值對的鍵和值要么是小整數值,要么是長度較短的字符串時,那么Redis就會使用壓縮列表來做為列表鍵或哈希鍵的底層實現。

?

? ? ? ??壓縮列表是Redis為了節約內存而開發的,可用于存儲字符串和整數值。它是一個順序型數據結構,由一系列特殊編碼的連續內存塊組成。一個壓縮列表可以包含任意多個結點(entry),每個entry的大小不定,每個entry可保存一個字符串或一個整數值。

?

???????? ziplist的相關實現在都在ziplist.c中。

?

一:ziplist結構

? ? ? ??ziplist的結構如下:

<zlbytes><zltail><zllen><entry1><entry2>...<entryN><zlend>

? ? ? ??zlbytes是一個uint32_t類型的整數,表示整個ziplist占用的內存字節數;

? ? ? ??zltail是一個uint32_t類型的整數,表示ziplist中最后一個entry的偏移量,通過該偏移量,無需遍歷整個ziplist就可以確定尾結點的地址;

? ? ? ??zllen是一個uint16_t類型的整數,表示ziplist中的entry數目。如果該值小于UINT16_MAX(65535),則該屬性值就是ziplist的entry數目,若該值等于UINT16_MAX(65535),則還需要遍歷整個ziplist才能得到真正的entry數目;

? ? ? ??entryX表示ziplist的結點,每個entry的長度不定;

? ? ? ??zlend是一個uint8_t類型的整數,其值為0xFF(255),表示ziplist的結尾。

?

???????? 在ziplist.c中,定義了一系列的宏,可以分別獲取ziplist中存儲的各個屬性,比如:

#define ZIPLIST_BYTES(zl) (*((uint32_t*)(zl))) #define ZIPLIST_TAIL_OFFSET(zl) (*((uint32_t*)((zl)+sizeof(uint32_t)))) #define ZIPLIST_LENGTH(zl) (*((uint16_t*)((zl)+sizeof(uint32_t)*2))) #define ZIPLIST_HEADER_SIZE (sizeof(uint32_t)*2+sizeof(uint16_t)) #define ZIPLIST_ENTRY_HEAD(zl) ((zl)+ZIPLIST_HEADER_SIZE) #define ZIPLIST_ENTRY_TAIL(zl) ((zl)+intrev32ifbe(ZIPLIST_TAIL_OFFSET(zl))) #define ZIPLIST_ENTRY_END(zl) ((zl)+intrev32ifbe(ZIPLIST_BYTES(zl))-1)

???????? ZIPLIST_BYTES獲取ziplist中的zlbytes屬性;ZIPLIST_TAIL_OFFSET獲取ziplist的zltail屬性;ZIPLIST_LENGTH獲取ziplist的zllen屬性

???????? ZIPLIST_ENTRY_HEAD得到ziplist頭結點的地址;ZIPLIST_ENTRY_TAIL得到ziplist中尾節點的首地址,ZIPLIST_ENTRY_END得到ziplist結尾字節zlend的地址。

???????? 注意,ziplist中所有的屬性值都是以小端的格式存儲的。因此取得ziplist中保存的屬性值后,還需要對內存做字節翻轉才能得到真正的值。intrev32ifbe就是在大端系統下對內存進行字節翻轉的函數。

?

二:entry結構

? ? ? ??每個壓縮列表節點都由previous_entry_length、encoding和content三部分組成。

? ? ? ??previous_entry_length表示前一個entry的字節長度,根據該字段值就可以從后向前遍歷ziplist。

? ? ? ??previous_entry_length字段長度可以是1字節,也可以是5字節。如果前一個entry長度小于254字節,則該字段只占用一個字節;如果前一個entry長度大于等于254字節,則該字段占用5個字節:第一個字節置為0xFE(254),之后的4個字節保存entry的實際長度(小端格式存儲)。

? ? ? ??之所以用0xFE(254)這個值作為分界點,是因為0xFF(255)被用作ziplist的結束標志,一旦掃描到0xFF,就認為ziplist結束了。

?

? ? ? ??entry的content字段保存節點的實際內容,它可以是一個字符串或者整數,值的類型和長度由encoding屬性決定。

?

? ? ? ??encoding字段記錄了節點的content所保存的數據類型及長度。如果entry中保存的是字符串,則encoding字段的前2個二進制位可以是00、01和10,分別表示不同長度類型的字符串,剩下的二進制位就表示字符串的實際長度;如果entry中的內容為整數,則encoding字段的前2個二進制位都為11,剩下的2個二進制位表示整數的類型。encoding的形式如下:

? ? ? ??00pppppp,1字節,表示長度小于等于63(2^6- 1) 字節的字符串;

? ? ? ??01pppppp|qqqqqqqq,2 字節,表示長度小于等于16383(2^14 - 1) 字節的字符串;

? ? ? ??10______|qqqqqqqq|rrrrrrrr|ssssssss|tttttttt,5字節,表示長度小于等于4294967295(2^32- 1) 字節的字符串

?

? ? ? ??11000000,1字節,表示int16_t類型的整數;

? ? ? ??11010000,1字節,表示int32_t類型的整數;

? ? ? ??11100000,1字節,表示int64_t類型的整數;

? ? ? ??11110000,1字節,表示24位有符號整數;

? ? ? ??11111110,1字節,表示8位有符號整數;

? ? ? ??1111xxxx,1字節,表示0到12之間的值。使用這一編碼的節點沒有相應的oontont屬性,因為xxxx就可以表示0到12之間的值。因為0000和1110不可用,所以xxxx的取值從0001到1101,也就是1到13之間的值。因此,需要從xxxx減去1,才能得到實際的值。

? ? ? ??注意,所有的整數都是以小端的格式存儲的。

?

三:連鎖更新

? ? ? ??每個節點的previous_entry_length字段記錄了前一個節點的長度。如果前一節點的長度小于254字節,那么previous_entry_length字段占用1個字節;如果前一節點的長度大于等于254字節,那么previous_entry_length字段占用5個字節。

? ? ? ??考慮這樣一種情況:在一個壓縮列表中,有多個連續的、長度介于250字節到253字節之間的節點e1至eN。因所有節點的長度都小于254字節,所以e1至eN節點的previous_entry_length字段都是1字節長。

? ? ? ??這時,如果將一個長度大于等于254字節的新節點new設置為壓縮列表的表頭節點,那么new將成為e1的前置節點,但是因為e1的previous_entry_length字段僅長1字節,沒辦法保存新節點new的長度,所以需要對壓縮列表執行空間重分配操作,將e1節點的previous_entry_length字段從原來的1字節擴展為5字節。

? ? ? ??現在,麻煩的事情來了,原e1的長度介于250字節至253字節之間,e1的previous_entry_length字段變成5個字節后,e1的長度就大于等于254了。從而e2的previous_entry_length字段,也需要從原來的1字節長擴展為5字節長。

? ? ? ??因此,需要再次對壓縮列表執行空間重分配操作,并將e2節點的previous_entry_length屬性從原來的1字節長擴展為5字節長。

? ? ? ??以此類推,為了讓每個節點的previous_entry_length屬性都符合壓縮列表對節點的要求,程序需要不斷地對壓縮列表執行空間重分配操作,直到eN為止。

? ? ? ??Redis將這種在特殊情況下產生的連續多次空間擴展操作稱之為“連鎖更新”(cascade update)。除了添加新節點可能會引發連鎖更新之外,刪除節點也可能會引發連鎖更新。

?

? ? ? ??因為連鎖更新在最壞情況下需要對壓縮列表執行N次空間重分配操作,而每次空間重分配的最壞復雜度為O(N),所以連鎖更新的最壞復雜度為O(N^2)。

? ? ? ??盡管連鎖更新的復雜度較高,但它真正造成性能間題的幾率是很低的。

? ? ? ??首先,壓縮列表里要恰好有多個連續的、長度介于250字節至253字節之間的節點,連鎖更新才有可能觸發。在實際中,這種情況并不多見;

? ? ? ??其次,即使出現連鎖更新,但只要被更新的節點數量不多,就不會對性能造成任何影響,比如對三五個節點進行連鎖更新是絕對不會影響性能的;

? ? ? ??因此,ziplistPush等函數的平均復雜度僅為O(N)。在實際中,我們可以放心地使用這些函數,而不必擔心連鎖更新會影響壓縮列表的性能。

?

? ? ? ??ziplist變動時,previous_entry_length字段長度可能需要從1字節擴展為5字節,從而會引起連鎖更新,也可能需要從5字節收縮為1字節。這就有可能會發生抖動現象,也就是節點的previous_entry_length字段,不斷的擴展和收縮的現象。Redis中,為了避免這種現象,允許previous_entry_length字段在需要收縮的情況下,保持5字節不變。

?

四:代碼

? ? ? ??Redis中的ziplist實現,并未涉及難以理解的算法。但是因為ziplist本身的編碼需求較多,因而代碼需要處理各種細節,初看之下比較繁雜,分析之后,其實很容易理解。

?

1:連鎖更新

? ? ? ??下面就是處理連鎖更新的代碼,zl指向一個ziplist,p指向其中第一個不需要更新的節點(第一個已經更新過的節點),其后續的節點可能需要更新:

static unsigned char *__ziplistCascadeUpdate(unsigned char *zl, unsigned char *p) {size_t curlen = intrev32ifbe(ZIPLIST_BYTES(zl)), rawlen, rawlensize;size_t offset, noffset, extra;unsigned char *np;zlentry cur, next;while (p[0] != ZIP_END) {cur = zipEntry(p);rawlen = cur.headersize + cur.len;rawlensize = zipPrevEncodeLength(NULL,rawlen);/* Abort if there is no next entry. */if (p[rawlen] == ZIP_END) break;next = zipEntry(p+rawlen);/* Abort when "prevlen" has not changed. */if (next.prevrawlen == rawlen) break;if (next.prevrawlensize < rawlensize) {/* The "prevlen" field of "next" needs more bytes to hold* the raw length of "cur". */offset = p-zl;extra = rawlensize-next.prevrawlensize;zl = ziplistResize(zl,curlen+extra);p = zl+offset;/* Current pointer and offset for next element. */np = p+rawlen;noffset = np-zl;/* Update tail offset when next element is not the tail element. */if ((zl+intrev32ifbe(ZIPLIST_TAIL_OFFSET(zl))) != np) {ZIPLIST_TAIL_OFFSET(zl) =intrev32ifbe(intrev32ifbe(ZIPLIST_TAIL_OFFSET(zl))+extra);}/* Move the tail to the back. */memmove(np+rawlensize,np+next.prevrawlensize,curlen-noffset-next.prevrawlensize-1);zipPrevEncodeLength(np,rawlen);/* Advance the cursor */p += rawlen;curlen += extra;} else {if (next.prevrawlensize > rawlensize) {/* This would result in shrinking, which we want to avoid.* So, set "rawlen" in the available bytes. */zipPrevEncodeLengthForceLarge(p+rawlen,rawlen);} else {zipPrevEncodeLength(p+rawlen,rawlen);}/* Stop here, as the raw length of "next" has not changed. */break;}}return zl; }

? ? ? ??首先獲取ziplist當前的長度curlen;

? ? ? ??然后從p開始輪訓,獲取p指向節點的總長度rawlen,以及編碼該字節長度需要的字節數rawlensize;

? ? ? ??如果p指向的結點沒有后繼結點,直接退出返回;否則,next表示p的后繼節點,next節點的previous_entry_length字段值為next.prevrawlen,該字段長度是next.prevrawlensize。如果next.prevrawlen與rawlen相等,則表示next節點的前繼節點的長度未發生變化,直接退出返回;

?

? ? ? ??如果next.prevrawlensize小于rawlensize,表示next節點的前繼節點的長度,原來小于254字節,現在大于等于254字節了。因此next節點的previous_entry_length字段需要擴展長度,擴展的字節數extra為rawlensize-next.prevrawlensize,利用ziplistResize擴展ziplist的內存空間。注意,擴容前要保存p的偏移量,擴容后利用該偏移量,可以重新得到p的位置。

? ? ? ??如下圖,分別表示擴容前和擴容后的情況:

? ? ? ??如果next節點不是尾節點,則需要更新ziplist的zltail屬性;如果next是尾結點,因為next之前的內容沒有變化,因此無需更新zltail屬性;

? ? ? ??然后開始移動內存,移動的內容是,從next節點的previous_entry_length字段之后的內存開始,到ziplist末尾字節zlend之前的內容:memmove(np+rawlensize, np+next.prevrawlensize, curlen-noffset-next.prevrawlensize-1);

? ? ? ??然后更新next中的previous_entry_length字段為rawlen;

? ? ? ??然后p指向next節點,依次遍歷下一個節點;

????????

? ? ? ??如果next.prevrawlensize大于rawlensize,表示next節點的前繼節點的長度,原來大于等于254字節,現在小于254字節了。為了避免“抖動”,調用zipPrevEncodeLengthForceLarge保持next節點的previous_entry_length字段長度不變,并強制編碼為rawlen,然后退出返回;

?

? ? ? ??如果next.prevrawlensize等于rawlensize,表示next節點的前繼節點的長度,原來小于254字節,現在還是小于254字節,或者原來大于等于254字節,現在還是大于等于254字節。這種情況下,直接將next節點的previous_entry_length字段編碼為rawlen,然后退出返回。

?

2:刪除節點

? ? ? ??下面是刪除節點的代碼,從ziplist中,p指向的節點開始,最多刪除num個節點:

static unsigned char *__ziplistDelete(unsigned char *zl, unsigned char *p, unsigned int num) {unsigned int i, totlen, deleted = 0;size_t offset;int nextdiff = 0;zlentry first, tail;first = zipEntry(p);for (i = 0; p[0] != ZIP_END && i < num; i++) {p += zipRawEntryLength(p);deleted++;}totlen = p-first.p;if (totlen > 0) {if (p[0] != ZIP_END) {/* Storing `prevrawlen` in this entry may increase or decrease the* number of bytes required compare to the current `prevrawlen`.* There always is room to store this, because it was previously* stored by an entry that is now being deleted. */nextdiff = zipPrevLenByteDiff(p,first.prevrawlen);p -= nextdiff;zipPrevEncodeLength(p,first.prevrawlen);/* Update offset for tail */ZIPLIST_TAIL_OFFSET(zl) =intrev32ifbe(intrev32ifbe(ZIPLIST_TAIL_OFFSET(zl))-totlen);/* When the tail contains more than one entry, we need to take* "nextdiff" in account as well. Otherwise, a change in the* size of prevlen doesn't have an effect on the *tail* offset. */tail = zipEntry(p);if (p[tail.headersize+tail.len] != ZIP_END) {ZIPLIST_TAIL_OFFSET(zl) =intrev32ifbe(intrev32ifbe(ZIPLIST_TAIL_OFFSET(zl))+nextdiff);}/* Move tail to the front of the ziplist */memmove(first.p,p,intrev32ifbe(ZIPLIST_BYTES(zl))-(p-zl)-1);} else {/* The entire tail was deleted. No need to move memory. */ZIPLIST_TAIL_OFFSET(zl) =intrev32ifbe((first.p-zl)-first.prevrawlen);}/* Resize and update length */offset = first.p-zl;zl = ziplistResize(zl, intrev32ifbe(ZIPLIST_BYTES(zl))-totlen+nextdiff);ZIPLIST_INCR_LENGTH(zl,-deleted);p = zl+offset;/* When nextdiff != 0, the raw length of the next entry has changed, so* we need to cascade the update throughout the ziplist */if (nextdiff != 0)zl = __ziplistCascadeUpdate(zl,p);}return zl; }

? ? ? ??首先將p轉化為zlentry結構的first,然后從p開始向后遍歷num個節點,這樣,就得到了需要刪除的節點數deleted,以及要刪除的總字節數totlen。只有當totlen大于0時,才進行刪除動作,否則直接返回zl;此時p指向最后一個刪除節點的后繼節點;

?

? ? ? ??若此時p不是ziplist的結尾字節,則其指向節點的previous_entry_length字段,需要設置為新值first.prevrawlen。首先計算p指向節點,其新舊previous_entry_length字段長度的差值nextdiff,nextdiff為正,表示p節點的previous_entry_length字段需要擴容,從要刪除的內存中選擇擴容的部分,因此p-=nextdiff,p向前走nextdiff個字節,表示少刪除nextdiff個字節。如果nextdiff為負,表示p節點的previous_entry_length字段需要收縮,因此p-=nextdiff,表示p向后走nextdiff個字節,表示多刪除nextdiff個字節;

? ? ? ??然后重新設置p指向節點的previous_entry_length字段值為first.prevrawlen;

????????

? ? ? ??接下來就是調整zltail屬性,分情況討論:如果遍歷num個節點之后,未做nextdiff調整之前,p指向的節點就是尾結點,如下圖所示(僅以nextdiff為正為例):

? ? ? ??上圖中,p'表示未做nextdiff調整之前的指針,也就是指向原尾結點的指針,p表示做出nextdiff調整之后的指針。刪除num個節點之后,zltail的值,也就是first.p-zl,因此有:new_zltail = old_zltail - totlen; 刪除后如下圖所示:

? ? ? ??上面的情況,對于nextdiff為負也是成立的,不再贅述。

????????

? ? ? ??如果遍歷num個節點之后,未做nextdiff調整之前,p指向的節點不是尾結點,則新的zltail,等于舊的zltail,減去刪除的總字節數,刪除的總字節數為totlen-nextdiff,因此有:new_zltail = old_zltail - totlen + nextdiff;

?

? ? ? ??更新完zltail屬性后,接下來就是移動內存了,將當前p指向的內存,移動到first.p指向的位置上,移動的內存總數就是,從當前p指向的內存開始,到ziplist結尾字節之前的內容;

?

? ? ? ??如果在遍歷num個節點之后,p指向的字節就是ziplist的結尾字節,則無需移動內存,僅需要重新設置zltail屬性即可,此時的尾結點,是first.p的前繼節點,因此有:new_zltail = first.p - zl -first.prevrawlen;

?

? ? ? ??移動內存,以及設置新的zltail之后,剩下的就是重新為ziplist分配空間,并且設置新的zllen屬性。注意,重新分配ziplist內存之前,保存p的偏移量offset,這樣,在分配空間之后,就可以利用offset重新得到p的位置了;

? ? ? ??如果nextdiff不為0,表示p指向的節點的大小發生了變化,調用__ziplistCascadeUpdate處理后續的節點。

?

3:插入節點

???????? 下面是插入節點的代碼,根據原始數據s,及其長度slen,新建一個ziplist節點,將該節點插入到p之前的位置,也就是,p指向的節點,成為新結點的后繼節點。

static unsigned char *__ziplistInsert(unsigned char *zl, unsigned char *p, unsigned char *s, unsigned int slen) {size_t curlen = intrev32ifbe(ZIPLIST_BYTES(zl)), reqlen;unsigned int prevlensize, prevlen = 0;size_t offset;int nextdiff = 0;unsigned char encoding = 0;long long value = 123456789; /* initialized to avoid warning. Using a valuethat is easy to see if for some reasonwe use it uninitialized. */zlentry tail;/* Find out prevlen for the entry that is inserted. */if (p[0] != ZIP_END) {ZIP_DECODE_PREVLEN(p, prevlensize, prevlen);} else {unsigned char *ptail = ZIPLIST_ENTRY_TAIL(zl);if (ptail[0] != ZIP_END) {prevlen = zipRawEntryLength(ptail);}}/* See if the entry can be encoded */if (zipTryEncoding(s,slen,&value,&encoding)) {/* 'encoding' is set to the appropriate integer encoding */reqlen = zipIntSize(encoding);} else {/* 'encoding' is untouched, however zipEncodeLength will use the* string length to figure out how to encode it. */reqlen = slen;}/* We need space for both the length of the previous entry and* the length of the payload. */reqlen += zipPrevEncodeLength(NULL,prevlen);reqlen += zipEncodeLength(NULL,encoding,slen);/* When the insert position is not equal to the tail, we need to* make sure that the next entry can hold this entry's length in* its prevlen field. */nextdiff = (p[0] != ZIP_END) ? zipPrevLenByteDiff(p,reqlen) : 0;/* Store offset because a realloc may change the address of zl. */offset = p-zl;zl = ziplistResize(zl,curlen+reqlen+nextdiff);p = zl+offset;/* Apply memory move when necessary and update tail offset. */if (p[0] != ZIP_END) {/* Subtract one because of the ZIP_END bytes */memmove(p+reqlen,p-nextdiff,curlen-offset-1+nextdiff);/* Encode this entry's raw length in the next entry. */zipPrevEncodeLength(p+reqlen,reqlen);/* Update offset for tail */ZIPLIST_TAIL_OFFSET(zl) =intrev32ifbe(intrev32ifbe(ZIPLIST_TAIL_OFFSET(zl))+reqlen);/* When the tail contains more than one entry, we need to take* "nextdiff" in account as well. Otherwise, a change in the* size of prevlen doesn't have an effect on the *tail* offset. */tail = zipEntry(p+reqlen);if (p[reqlen+tail.headersize+tail.len] != ZIP_END) {ZIPLIST_TAIL_OFFSET(zl) =intrev32ifbe(intrev32ifbe(ZIPLIST_TAIL_OFFSET(zl))+nextdiff);}} else {/* This element will be the new tail. */ZIPLIST_TAIL_OFFSET(zl) = intrev32ifbe(p-zl);}/* When nextdiff != 0, the raw length of the next entry has changed, so* we need to cascade the update throughout the ziplist */if (nextdiff != 0) {offset = p-zl;zl = __ziplistCascadeUpdate(zl,p+reqlen);p = zl+offset;}/* Write the entry */p += zipPrevEncodeLength(p,prevlen);p += zipEncodeLength(p,encoding,slen);if (ZIP_IS_STR(encoding)) {memcpy(p,s,slen);} else {zipSaveInteger(p,value,encoding);}ZIPLIST_INCR_LENGTH(zl,1);return zl; }

? ? ? ? ?首先獲取ziplist當前長度curlen;

???????? 然后得到p指向位置的前繼節點的長度prevlen;

???????? 然后計算新結點中content部分的長度:如果s中的內容能夠表示為整數值,則得到該整數值的長度reqlen,否則,reqlen等于slen;

???????? 根據prevlen,得到新結點的previous_entry_length字段長度,加到reqlen中;

???????? 根據encoding和slen,得到新結點的encoding字段長度,加到reqlen中,至此,reqlen就表示新結點的總長度;

????????

? ? ? ? ? 因新結點將成為p的前繼節點,因此,只要p并非ziplist的結尾字節,就利用zipPrevLenByteDiff,計算p中新舊previous_entry_length字段的長度之差nextdiff,nextdiff為正,表示因新結點的長度大于等于254,p的previous_entry_length字段需要擴容nextdiff個字節;如果nextdiff為負,表示因新結點的長度小于254,p的previous_entry_length字段需要收縮nextdiff個字節;

?

???????? 接下來,利用ziplistResize對ziplist進行擴容,擴容長度為reqlen+nextdiff,擴容之前,保存p的偏移量offset,這樣擴容后根據offset,就可以重新得到p的位置;

?

???????? 如果p并非ziplist的結尾字節,則接下來開始移動內存,從p-nextdiff指向的位置,移動到p+reqlen的位置,移動的字節數為curlen-offset-1+nextdiff;

???????? 然后設置新結點的后繼節點(也就是插入之前,p指向的節點)的previous_entry_length字段;

???????? 然后設置zltail屬性,這里根據p是否是尾結點而區分對待,情況類似與__ziplistDelete中的討論,不再贅述。

?

???????? 如果p就是ziplist的結尾字節,則只需要更新zltail屬性即可;

????????

???????? 如果nextdiff非0,則需要調用__ziplistCascadeUpdate,處理p+reqlen節點開始的連鎖升級或是收縮情況;

???????? 最后,設置插入的新結點的各種字段值,并更新zllen屬性。

?

? ? ? ? ?其他關于ziplist的代碼,可參閱:

https://github.com/gqtc/redis-3.0.5/blob/master/redis-3.0.5/src/ziplist.c

轉載于:https://www.cnblogs.com/gqtcgq/p/7247072.html

總結

以上是生活随笔為你收集整理的Redis源码解析:07压缩列表的全部內容,希望文章能夠幫你解決所遇到的問題。

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

久久综合九色综合久99 | 久久久国产成人 | 国产精品伦一区二区三区视频 | 丝袜美女视频网站 | 伊人影院得得 | 99riav1国产精品视频 | 日韩欧美成 | 999国内精品永久免费视频 | 国产精品第一视频 | 天天操天天射天天舔 | 国产精品资源 | 欧美精品久久久久久久久久白贞 | 波多野结衣电影一区二区三区 | 久久激情五月婷婷 | a黄色大片 | 国产精品系列在线观看 | 欧美一级视频在线观看 | 碰超在线观看 | 国产成人av网站 | 深爱五月激情五月 | 91av在线免费播放 | 夜夜操夜夜干 | 国产一二三四在线视频 | 国产a免费 | 久久成人视屏 | 亚洲成熟女人毛片在线 | 久久久免费播放 | 激情视频免费在线 | 亚洲 欧洲 国产 日本 综合 | 亚洲国产日韩一区 | 色婷婷国产 | 天天操天天干天天玩 | 在线激情小视频 | 中文字幕亚洲在线观看 | 精品国产成人av | 91视频免费看 | 国产99久久九九精品 | 国内精品美女在线观看 | 天天玩夜夜操 | 国产精品第一视频 | 日韩一区二区三区不卡 | 91亚洲狠狠婷婷综合久久久 | 97在线精品视频 | 国内精品视频在线播放 | 天天干,天天操 | 国产视频一级 | 激情综合交| 日韩三级视频在线观看 | 成人一级免费视频 | 久一在线 | 欧美午夜精品久久久久 | 日韩成人黄色 | 香蕉影院在线播放 | 日本黄色大片免费 | 久久国产精品99久久人人澡 | 久久久久久久久久网站 | 精品国产综合区久久久久久 | 黄色录像av | 免费在线观看成人 | 国产精品99精品久久免费 | 日日麻批40分钟视频免费观看 | 性色av免费在线观看 | 色婷婷www| 九色精品免费永久在线 | 婷婷综合久久 | 狠狠干夜夜操天天爽 | 国产中文字幕网 | 99精品久久99久久久久 | 久久久久久久综合色一本 | 全黄网站 | 国产视频 亚洲精品 | 亚洲午夜精品一区 | 999热线在线观看 | 天天操天天爽天天干 | 91chinese在线 | 国产午夜av | 国产一区在线免费观看视频 | 99一区二区三区 | 国产资源精品 | 西西44人体做爰大胆视频 | 91成人精品一区在线播放69 | www.午夜视频 | 91av视频导航 | 日本大片免费观看在线 | 国产午夜一级毛片 | 手机av在线网站 | 天天操比| av福利在线播放 | 最近中文国产在线视频 | 久久久www | 国产精品久久久 | 亚洲精品久久久蜜臀下载官网 | 91porny九色在线播放 | 国产不卡一 | 丰满少妇在线观看 | 色综合天天综合在线视频 | 五月天亚洲激情 | 中文字幕在线字幕中文 | www91在线观看 | 国产精品自在欧美一区 | 黄色免费在线看 | 九九影视理伦片 | 久操视频在线 | 夜夜视频资源 | 人人爽人人爽人人爽人人爽 | 国产一级久久久 | 成人久久免费 | 欧美极品xxxxx | 正在播放国产一区二区 | 日韩免费三区 | 国产亚洲精品电影 | 亚洲天堂色婷婷 | 中文字幕在线观看一区 | 日韩中文字幕免费视频 | www国产在线 | 欧美一级裸体视频 | 成人在线一区二区三区 | 日b视频在线观看网址 | 成年人免费在线观看网站 | 韩国av三级 | 97国产精品亚洲精品 | 欧美日韩国语 | 久久99婷婷 | 日本精品久久久一区二区三区 | 天天操天天射天天添 | 一区二区三区视频在线 | 97电影网手机版 | 免费高清看电视网站 | 日韩毛片在线免费观看 | 在线视频 影院 | 成人午夜精品福利免费 | 精品9999 | 热久久影视 | 婷婷av资源 | 日本在线精品视频 | 精品久久视频 | 天天综合91| 欧美久久久久久久久中文字幕 | 欧美黑人xxxx猛性大交 | 天天色天天色 | 亚洲精品视频免费 | 天天色天天色 | 九月婷婷色 | 日本精品久久久久中文字幕5 | 国产一区二区观看 | 久草成人在线 | 91精品国产一区 | www.久热| 在线看成人片 | 亚洲闷骚少妇在线观看网站 | av一二三区 | 中文字幕色综合网 | 国产精品18久久久久久久网站 | 亚洲人成精品久久久久 | 成人一区在线观看 | 国产日产精品一区二区三区四区 | a成人v在线 | 激情网五月天 | 成人一级电影在线观看 | 美女久久一区 | 久久久免费观看 | 欧美综合在线视频 | 久久狠狠干| 日日夜夜天天射 | 久久久久免费观看 | 久久精品日韩 | 天天插狠狠干 | 免费久久精品视频 | 97成人在线 | 久久免费的精品国产v∧ | 国产精品一区二区在线播放 | 欧美最猛性xxxxx免费 | 亚洲黄a | 97av超碰 | 色偷偷网站视频 | 国产精品久久久久久久久费观看 | 夜夜视频 | 久久久精品欧美一区二区免费 | 国产精品精 | 亚洲国产一二三 | 伊人婷婷| 国产精品久久久久久久久久白浆 | 最新av在线免费观看 | 色a网| 亚洲情影院 | 久久视频6 | 国产精品入口66mio女同 | 午夜久久影视 | 免费三级黄 | 高清中文字幕 | 久久视频二区 | 色偷偷人人澡久久超碰69 | 91精品国自产在线观看 | 欧美一级视频在线观看 | 国产成人三级 | 成人影片免费 | 久久精品这里热有精品 | 亚洲高清91| 天天综合色 | 天堂久久电影网 | 激情深爱 | 日韩精品一区二区三区免费观看 | 91福利国产在线观看 | 久久精品欧美一区 | 亚洲精品乱码白浆高清久久久久久 | 欧美日韩亚洲第一 | 九九九九九国产 | 国产精品自在线拍国产 | 欧美激情综合五月色丁香 | www激情网| 国产精品毛片一区视频播不卡 | 在线观看国产中文字幕 | 亚洲精品久久久久久久蜜桃 | 97超碰在线人人 | 综合色伊人| 久久国产香蕉视频 | 少妇性色午夜淫片aaaze | 国产精品 日韩 欧美 | 激情电影影院 | www.久久视频 | 天天操·夜夜操 | 美国av片在线观看 | 伊人欧美 | 亚洲激情 欧美激情 | 色偷偷av男人天堂 | 综合影视 | 欧美日韩高清不卡 | 天天操天天操天天 | 伊人成人激情 | 久久久久综合精品福利啪啪 | 国产精品一码二码三码在线 | 日韩视频免费观看高清完整版在线 | 热99久久精品| 日韩精品在线一区 | 日韩高清精品免费观看 | 麻豆传媒在线免费看 | 天天色天天色天天色 | 91av久久| 日韩欧美一区二区在线播放 | a级国产乱理论片在线观看 特级毛片在线观看 | 在线精品视频免费播放 | 日韩免费观看一区二区三区 | 国产 欧美 日产久久 | 青青久草在线 | 五月天狠狠操 | 国产亚洲免费的视频看 | 日韩欧美一区二区三区在线观看 | 久久国产精品免费 | 天干啦夜天干天干在线线 | 久久综合久久综合这里只有精品 | av成年人电影 | 日韩欧美精品一区二区三区经典 | 国产精品久久久久久久久久东京 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产999精品久久久 免费a网站 | 国产精品一码二码三码在线 | 亚洲狠狠婷婷综合久久久 | 日韩特级黄色片 | 一二三区视频在线 | 丁香色综合 | 一区二区三区免费在线观看视频 | 亚洲美女视频网 | 久久永久免费 | 国产在线va| 精品在线视频一区 | 手机看片 | 亚洲精品高清视频在线观看 | 国产黄色大全 | 成人一区电影 | 精品国产aⅴ一区二区三区 在线直播av | 久久综合久久综合九色 | 91av在线免费播放 | 久久久久久久久久久久久9999 | 亚洲a资源| 天堂av在线 | 在线播放精品一区二区三区 | 久久精品国产精品亚洲 | 亚洲激情在线播放 | 国产亚洲精品久久网站 | 在线免费观看视频一区 | 99热高清 | 中文字幕色在线视频 | 久久久男人的天堂 | 日韩av一区二区在线播放 | 九九九热 | 99re亚洲国产精品 | 最近2019好看的中文字幕免费 | 久香蕉 | 91超级碰| 亚洲永久精品一区 | 日本在线h| 免费看久久久 | 国产亚洲精品久久久久久电影 | 欧美精品一级视频 | 亚洲精品国产精品国自产 | 伊人五月天 | 日韩色在线 | 精品产品国产在线不卡 | 国产黑丝一区二区三区 | 国产精品专区在线观看 | 一级黄色片在线播放 | 精品国产伦一区二区三区观看体验 | 日日爽天天| 日本在线观看视频一区 | 亚洲精品美女在线观看播放 | 婷婷在线色 | 久久免费视频这里只有精品 | 国产精品热视频 | 美女久久久久久久 | 色视频在线观看免费 | 99热网站| 精品国产乱码 | a黄色片 | 久久国产精品影片 | 久久综合桃花 | 97色视频在线 | 精品国产一区二区三区在线观看 | 成人免费共享视频 | 91热视频在线观看 | 日韩视频在线观看视频 | 四虎影视久久久 | 亚洲欧美一区二区三区孕妇写真 | 69夜色精品国产69乱 | 亚洲国产精品成人va在线观看 | 日韩欧美久久 | 亚洲 欧美 精品 | 国产精品久久久久久影院 | 久久精品综合网 | 国产视频资源在线观看 | 国产高清不卡在线 | 久在线 | 91av中文字幕 | 欧美日韩一区二区视频在线观看 | 女人18片毛片90分钟 | 日韩精品视频久久 | 成人精品福利 | 国产精品午夜在线 | 中文字幕一区二区三区乱码不卡 | 免费看一级特黄a大片 | 国产精品一区二区美女视频免费看 | 欧美日本不卡高清 | 97精品欧美91久久久久久 | 欧美日韩裸体免费视频 | 少妇性aaaaaaaaa视频 | 福利一区在线 | 久久国产一区二区 | 国产精品久久久久久久久久99 | 国产成人精品在线观看 | 亚洲午夜久久久影院 | 精品在线一区二区三区 | 456成人精品影院 | 久久精品123 | 99久久综合狠狠综合久久 | 夜夜躁日日躁狠狠躁 | 深爱五月激情网 | 97超碰资源 | 91九色性视频 | 国产网站在线免费观看 | 99re久久精品国产 | 国产精品你懂的在线观看 | 亚洲三级毛片 | av在线电影播放 | 97成人在线观看 | 国产精品99久久久久久武松影视 | 午夜精品福利一区二区 | 久久中文字幕视频 | 欧美一二三区播放 | 91色在线观看视频 | 一区免费观看 | 国产亚洲综合性久久久影院 | 免费视频色 | 中文字幕在线观看完整版电影 | 韩国av在线 | 精品免费在线视频 | 亚洲婷婷在线 | 91免费版成人| 69视频在线 | 69绿帽绿奴3pvideos| 亚洲综合在线五月 | 精品久久久久久久久久久久 | 欧洲一区二区三区精品 | 国产一区精品在线 | 在线a视频免费观看 | 久精品视频在线 | 久久精品亚洲一区二区三区观看模式 | 天天爽天天搞 | 91大神精品视频在线观看 | 欧美午夜久久 | 精品在线一区二区 | 国产亚洲精品美女久久 | 深爱婷婷| 成年人视频免费在线播放 | 欧美日本不卡视频 | 日韩av一区二区在线 | 国内久久视频 | 午夜精品久久久久久久99水蜜桃 | 色就色,综合激情 | 欧美精品天堂 | 99精品在线观看 | 日本韩国精品一区二区在线观看 | 久草在线手机观看 | 黄色一级影院 | 制服丝袜一区二区 | 成人久久精品 | 色播五月激情综合网 | 亚洲欧美日韩精品久久奇米一区 | 亚洲91中文字幕无线码三区 | 久久久18 | 欧美日韩中文字幕在线视频 | 99精品久久久久 | 成人av电影在线播放 | 久久国产美女 | 精品国产91亚洲一区二区三区www | 国产精品永久在线 | 亚洲欧洲精品一区二区精品久久久 | 亚洲精品在线观看的 | 免费aa大片 | 99视频在线免费看 | 久久国产精品久久久 | 午夜黄色一级片 | 激情综合网五月 | 永久av免费在线观看 | 日韩免费在线 | 深爱激情综合网 | 日本在线观看一区二区三区 | a精品视频 | 97电影网站 | 国产精品一区二区在线观看免费 | 欧美热久久 | 久久视频精品在线 | 国产成人精品一区二区三区网站观看 | 国产永久免费观看 | 国产成人精品在线 | 97在线视频免费 | 狠狠干夜夜爽 | 久久天堂影院 | 国产日产av| 99色99| 亚洲精品网站 | 色婷婷色 | 香蕉网在线播放 | 视频在线91| 国产三级午夜理伦三级 | 97超碰人人澡人人爱学生 | 亚洲一级片在线看 | 精品一区av| 国产精品久久久久永久免费看 | 伊色综合久久之综合久久 | 97超级碰碰 | 国产精品剧情在线亚洲 | 成年人看片 | 91人人干| 天天操夜夜摸 | 激情久久伊人 | av高清一区二区三区 | 久久亚洲欧美日韩精品专区 | 日韩激情视频在线 | 久久乐九色婷婷综合色狠狠182 | 午夜精品电影 | 人人爽人人爽人人爽人人爽 | 国产视频999| 狠狠操天天射 | 特级西西444www大胆高清无视频 | 99视频久 | 欧美极品在线播放 | 欧美性黑人 | 久久久久久久久久久精 | 国产精品爽爽爽 | 色片网站在线观看 | 国产精品久久久电影 | 欧美久久综合 | 色香网| 国产精品久久久久久久久岛 | 国产综合久久 | 国产精品国产三级在线专区 | 天天操天天怕 | 久久在现视频 | 欧美性受极品xxxx喷水 | 青青草国产在线 | 日b视频国产 | 人人网av | 久久伊人爱 | 肉色欧美久久久久久久免费看 | 日韩欧美一区二区三区免费观看 | 中文字幕在线观 | 久久成人精品视频 | 超碰在线成人 | 婷婷电影在线观看 | 午夜美女福利直播 | 日韩亚洲国产中文字幕 | 免费影视大全推荐 | 最近高清中文字幕在线国语5 | 亚洲欧洲xxxx | 福利网在线 | 亚洲视频综合 | 五月天丁香综合 | 国产成人黄色在线 | 国内精品国产三级国产aⅴ久 | 欧美a视频在线观看 | 日韩精品在线播放 | 亚洲精品影院在线观看 | 久一网站| av亚洲产国偷v产偷v自拍小说 | 成人亚洲精品久久久久 | 久久久国产精品网站 | 91精品国产乱码久久 | 操夜夜操 | 色婷婷成人网 | 国产精品久久伊人 | 在线观看中文字幕视频 | 日韩一区精品 | 天天曰天天干 | 国产色资源| 狠狠躁夜夜a产精品视频 | 在线观看免费高清视频大全追剧 | 欧美激情精品 | 在线观看91av | 久久爱www. | 国产一区二区三区高清播放 | 国产99久久九九精品免费 | 国产一级黄色av | 在线观看黄网站 | 伊人狠狠操 | 色狠狠一区二区 | 国产日韩视频在线播放 | 国产午夜精品一区二区三区欧美 | 成人黄色大片在线免费观看 | 精品久久精品 | 国产小视频在线免费观看 | 91精品国产99久久久久 | 爱爱av在线| av片在线看| 激情综合啪| 国产精品第二页 | 最新高清无码专区 | 色综合久久五月 | 午夜视频在线观看一区二区 | 亚洲精品国产精品乱码在线观看 | www.日日日.com | 久久有精品 | 欧美精彩视频在线观看 | 91理论片午午伦夜理片久久 | 国产一区二区播放 | 在线精品视频免费播放 | 亚洲精品 在线视频 | 黄在线| 亚洲精品中文字幕在线 | 婷婷免费视频 | 国产精品黄 | 欧产日产国产69 | 日本字幕网 | 六月激情网 | 操天天操 | 99精品久久只有精品 | 99视频精品免费视频 | av在线等| 国产色婷婷精品综合在线手机播放 | 国产亚洲欧美精品久久久久久 | 成人免费视频视频在线观看 免费 | 婷婷中文字幕综合 | 最近2019年日本中文免费字幕 | 中文av影院 | 2022久久国产露脸精品国产 | 日日日操 | 在线黄色免费 | 国产精品久久久久久久av电影 | 久久电影网站中文字幕 | 91亚色在线观看 | 亚洲精品电影在线 | 精品国产一二三四区 | 亚洲精品乱码久久久久久蜜桃动漫 | 奇米网777 | 精品中文字幕在线观看 | 97综合网 | 免费美女av | 国产成人精品999在线观看 | 国产精品自产拍 | 黄色三几片| 麻豆影视网 | av千婊在线免费观看 | 久久久久亚洲精品成人网小说 | 国产精品理论视频 | 午夜精品视频一区二区三区在线看 | 成人影片在线播放 | 午夜狠狠操 | 99久久99视频| av免费播放| 亚州国产精品视频 | 欧美黑人性猛交 | 色婷婷综合久久久久中文字幕1 | 亚洲欧美激情精品一区二区 | av中文字幕在线看 | 久久久国产精品人人片99精片欧美一 | 久久精品一区二区国产 | 人人玩人人弄 | 日韩一区二区免费视频 | 精品一区91 | 五月综合婷 | 天天综合狠狠精品 | 91麻豆文化传媒在线观看 | 欧美日韩不卡在线视频 | 伊人永久 | 午夜精品久久久久久久99婷婷 | 中文在线√天堂 | 免费久久视频 | 国产精品久久伊人 | 国产精品小视频网站 | 国产一级在线免费观看 | 欧美日韩一区二区在线 | 欧美另类性 | 日韩欧美中文 | 色永久免费视频 | 在线免费视频a | 免费色av| 国产精品久久久久四虎 | 欧美日韩性视频 | 欧美激情视频久久 | a国产精品 | 国产v视频| 五月婷婷视频 | 在线免费观看羞羞视频 | 欧美日韩亚洲第一 | 深爱激情开心 | 五月婷婷综合激情 | 中文视频在线 | 国产视频亚洲视频 | 久久精品一级片 | 91av原创 | 天天操操 | 色在线免费视频 | 日韩一区二区免费播放 | 色99导航| 日日日日| 激情开心 | 久久er99热精品一区二区 | 免费av试看| 特级毛片爽www免费版 | 久久精品超碰 | 99tvdz@gmail.com| 97在线观看免费高清完整版在线观看 | 在线观看一区 | 久久伦理| 国产成人久久精品77777综合 | 久久精品人人做人人综合老师 | 激情大尺度视频 | 亚洲午夜精品电影 | 亚洲国产色一区 | 亚洲午夜久久久久 | 伊人伊成久久人综合网站 | 欧美久久九九 | 97免费中文视频在线观看 | 日本在线成人 | 五月天综合在线 | 欧美精品亚洲精品 | 国产精品婷婷午夜在线观看 | 亚洲视频免费在线看 | 99久久99久久精品 | 人人澡人摸人人添学生av | 成人 亚洲 欧美 | 日韩网站视频 | 中文字幕一区二区三区视频 | 久久国产精品色婷婷 | 国产免费观看av | 99热最新| 日日操天天爽 | 天天婷婷 | 91麻豆视频网站 | 婷婷av电影 | 在线观av | 男女靠逼app | 日韩不卡高清 | 精品视频中文字幕 | av在线免费播放网站 | 五月综合色 | www色av| av免费看看| 日韩试看| 91完整版在线观看 | 一区二区三区四区免费视频 | 亚洲精品在线国产 | 国产午夜一区二区 | 亚洲涩涩一区 | 色av婷婷| 日韩免费在线播放 | 国产精品免费不 | 麻豆精品国产传媒 | 国产视频日韩视频欧美视频 | 成人免费ⅴa | 成人av中文字幕 | 欧美精品在线观看免费 | 超碰97公开 | 日韩一区二区三区高清免费看看 | 中文字幕精品一区二区精品 | 99av在线视频 | 久久伦理网 | 超碰在线最新地址 | 天堂在线视频中文网 | 成人av影院在线观看 | 成人av电影免费观看 | 日韩精品久久久久久久电影竹菊 | 国产96精品 | www.久久com | 日韩精品aaa | 四虎在线免费观看 | 久久国产精品久久精品 | 91九色丨porny丨丰满6 | 日韩二区三区在线观看 | 亚洲视频专区在线 | 久久国产剧场电影 | 98福利在线| 丰满少妇一级片 | 天天综合久久综合 | 国产精品精品国产婷婷这里av | 免费av片在线 | 久久精品视频网站 | 9热精品 | 久久久精品国产一区二区电影四季 | 色婷婷狠狠干 | 国产精品福利无圣光在线一区 | 国产精品扒开做爽爽的视频 | 丝袜av一区 | 波多野结衣在线观看一区 | 中文字幕视频观看 | 丝袜制服天堂 | 免费在线观看污网站 | 日韩欧美视频一区二区三区 | 久久人人爽爽 | 婷婷伊人综合亚洲综合网 | 欧美成人精品三级在线观看播放 | 亚洲不卡av一区二区三区 | 久久99精品国产99久久6尤 | 一区二区中文字幕在线播放 | 国产一卡在线 | 天天操狠狠操 | 欧美色综合久久 | 免费看一级特黄a大片 | 狠狠色丁香婷综合久久 | 成人在线视频在线观看 | 欧美大片mv免费 | 99久e精品热线免费 99国产精品久久久久久久久久 | 免费福利在线播放 | 久久 一区 | 香蕉久草 | 九九九免费视频 | 欧美一级大片在线观看 | 日韩av手机在线观看 | 黄色成年| 日韩91精品| 狠狠狠色丁香婷婷综合久久88 | 美女视频黄的免费的 | 国产丝袜制服在线 | 国产对白av | 在线免费观看视频a | 天堂av一区二区 | 黄色91免费观看 | 国产69精品久久99不卡的观看体验 | 三级av小说| 亚洲最大av在线播放 | 天天操偷偷干 | 人人精久 | 2019中文字幕第一页 | 九九九在线观看 | 91电影福利| www黄| 国产小视频在线 | 在线 高清 中文字幕 | 国偷自产中文字幕亚洲手机在线 | 亚洲闷骚少妇在线观看网站 | 久久国产美女 | 亚洲欧美日本国产 | 亚洲h在线播放在线观看h | 欧美不卡在线 | 在线观看网站你懂的 | 日韩欧美综合精品 | 夜夜躁日日躁狠狠久久88av | 国产午夜精品在线 | 免费av网站在线 | a电影免费看 | 国产精品欧美一区二区三区不卡 | 99久久精品免费看国产麻豆 | 黄色小说网站在线 | 91片网 | 亚洲资源在线网 | 国产一级二级在线 | a电影在线观看 | 丁香午夜婷婷 | 日韩91av | 91久久爱热色涩涩 | 中文字幕在线视频网站 | 国产一区二区在线精品 | 91桃色国产在线播放 | 最新免费中文字幕 | 激情在线网址 | 蜜臀av一区二区 | 久久久久成人精品免费播放动漫 | 九九色视频 | 婷婷久久一区 | 美女视频黄是免费的 | 日韩在线精品一区 | 欧美一区,二区 | 中文字幕免费高清 | 狠狠色丁香婷婷综合最新地址 | 久久久久国产精品厨房 | 色多多污污 | 久久这里精品视频 | 91成人免费在线 | 看av免费网站 | 在线观看免费视频你懂的 | 亚洲黄色在线看 | 亚洲性少妇性猛交wwww乱大交 | 久久久久久久综合色一本 | 免费黄色av电影 | 亚洲婷婷综合色高清在线 | 四虎国产永久在线精品 | 激情欧美一区二区三区 | 色婷婷久久久综合中文字幕 | 99999精品视频 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 亚洲日本精品 | 91网站在线视频 | 午夜av日韩| 成人av教育| 天天视频色版 | 97网站| 天天色天天射天天干 | 国产精品美女999 | 韩国三级av在线 | 国内精品久久久久影院一蜜桃 | 久久精品视频日本 | 五月婷婷色 | 婷婷色综合色 | 黄色大全免费网站 | 久久国产电影院 | 99色 | 麻豆免费在线播放 | 最新中文在线视频 | 国产成本人视频在线观看 | 色欧美视频 | 日韩xxx视频| 青草视频在线看 | 亚洲天堂香蕉 | 久久午夜国产精品 | 97超级碰碰碰视频在线观看 | 欧美日韩国产区 | 视频在线观看亚洲 | 色视频在线免费观看 | 99热在线观看免费 | av电影中文字幕 | 成人高清在线观看 | 亚洲高清av在线 | 96亚洲精品久久久蜜桃 | 久久久私人影院 | 亚洲精品字幕在线观看 | 免费a一级 | 免费v片 | 一区视频在线 | 精品一区二区电影 | 九九热在线视频免费观看 | 国产黄色片免费 | 国产精品精品 | 亚洲精品乱码久久久久久蜜桃91 | 99综合影院在线 | 国产成人一区二区三区在线观看 | 婷婷久久久久 | 色七七亚洲影院 | 日韩高清观看 | 国产啊v在线 | 欧美成人视 | 成人9ⅰ免费影视网站 | 国产在线观看二区 | 国产香蕉av | 狠日日| 欧美精品亚州精品 | 国产成人精品av在线 | av成人在线看| 天堂av在线网 | 日韩一区二区三区观看 | 天天操 夜夜操 | 欧美激情第八页 | 91视频啊啊啊 | 开心激情五月婷婷 | 免费看黄在线 | 西西444www高清大胆 | 视频国产在线观看18 | 国产一级视频在线 | 日韩va亚洲va欧美va久久 | 国产精品女人网站 | 97在线观看免费观看 | 在线观看91视频 | 91正在播放 | 午夜精品久久久 | 夜夜操网 | 日本三级中文字幕在线观看 | 免费观看91视频大全 | 亚洲精品9| 中文字幕日韩免费视频 | 午夜 久久 tv| 天天色天天射综合网 | 午夜精品电影 | 特级黄色片免费看 | 热热热热热色 | 婷婷色中文| 久久久久久毛片 | 久久草在线免费 | 日韩一区二区三区高清在线观看 | 九色在线 | 久久综合久久88 | 三级黄色网络 | 日本资源中文字幕在线 | 日韩精品不卡在线观看 | 国产美女搞久久 | 麻豆国产精品视频 | 成年人免费在线看 | 911精品美国片911久久久 | 超碰在线人人 | 一本一本久久a久久精品牛牛影视 | 视色网站 | 久久久久久毛片精品免费不卡 | 久久成人免费电影 | 欧美激情视频一二三区 | 国产在线观看a | 久久99国产一区二区三区 | 日日干干夜夜 | 永久免费在线 | 婷婷九月激情 | 国产一区二三区好的 | 四虎在线永久免费观看 | 97狠狠操 | 一区二区三区在线观看免费视频 | 久久免费视频在线观看6 | 丁香 婷婷 激情 | 中文一区在线 | 欧美激情综合五月 | 亚洲干视频在线观看 | 中文字幕不卡在线88 | av在观看 | 一本一本久久aa综合精品 | 久久九九久久 | 国产综合小视频 | 精品久久久亚洲 | 国产小视频国产精品 | 亚洲国产高清在线观看视频 | 日韩精品三区四区 | 亚洲欧洲国产日韩精品 | 成年人在线视频观看 | 麻豆精品传媒视频 | 婷久久| 亚洲综合一区二区精品导航 | 天天拍天天操 | 中文字幕成人在线观看 | 国产精品网站 | 国产成人精品电影久久久 | 99福利片 | 久久久久久久久久久电影 | 国产99久久久国产精品 | 波多野结衣综合网 | 亚洲激情在线播放 | 欧美一级性生活片 | 亚洲男男gaygay无套同网址 | 在线观看视频一区二区三区 | 日韩欧美在线观看 | 色人久久 | 亚洲免费在线看 | 丁香六月综合网 | 国产免费大片 | 亚洲人成在线观看 | 精品久久久999 | 久热久草| 不卡视频一区二区三区 | 国产精品第一页在线观看 | 欧洲黄色片 | 激情综合五月 | a午夜在线| 视频国产 | 亚洲午夜精品在线观看 | 天天操天天操天天操天天操 | 天天色天天操综合网 | 久久久久99999 | 免费看的黄网站 | 亚洲无在线| 久草在线播放视频 | 伊人天天操| 人人爱人人射 | 久久久免费av | 日韩免费网址 | 日本久久久精品视频 | av免费在线免费观看 | 91av社区 | 国产精品久久99综合免费观看尤物 | www.91av在线| 婷婷视频在线播放 | 国产伦理剧 | 国产精品成人在线 | 国产视频精选 | 成人网在线免费视频 | 亚洲精品国产精品久久99 | 六月丁香综合网 | 91成人观看 |