精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Redis熱點(diǎn)之底層實(shí)現(xiàn)篇

存儲(chǔ) 存儲(chǔ)軟件 Redis
Redis提供了Java、C/C++、C#、 PHP 、JavaScript、 Perl 、Object-C、Python、Ruby、Erlang、Golang等多種主流語言的客戶端,因此無論使用者是什么語言棧總會(huì)找到屬于自己的那款客戶端,受眾非常廣。

 [[327904]]

通過本文你將了解到以下內(nèi)容:

  • Redis的作者、發(fā)展演進(jìn)和江湖地位
  • Redis面試問題的概況

Redis底層實(shí)現(xiàn)相關(guān)的問題包括:

常用數(shù)據(jù)類型底層實(shí)現(xiàn)、SDS的原理和優(yōu)勢、字典的實(shí)現(xiàn)原理、跳表和有序集合的原理、Redis的線程模式和服務(wù)模型

溫馨提示:內(nèi)容并不難,就怕你不看。

看不懂可以先收藏先Mark,等到深入研究的時(shí)間再翻出來看看,你就發(fā)現(xiàn)真是24K干貨呀!停止吹噓,寫點(diǎn)不一樣的文字吧!

1.Redis往事

Redis是一個(gè)使用ANSI C編寫的開源、支持網(wǎng)絡(luò)、基于內(nèi)存、可選持久化的高性能鍵值對數(shù)據(jù)庫。Redis的之父是來自意大利的西西里島的Salvatore Sanfilippo,Github網(wǎng)名antirez,筆者找了作者的一些簡要信息并翻譯了一下,如圖:

 

Redis面試熱點(diǎn)之底層實(shí)現(xiàn)篇

 

從2009年第一個(gè)版本起Redis已經(jīng)走過了10個(gè)年頭,目前Redis仍然是最流行的key-value型內(nèi)存數(shù)據(jù)庫的之一。

優(yōu)秀的開源項(xiàng)目離不開大公司的支持,在2013年5月之前,其開發(fā)由VMware贊助,而2013年5月至2015年6月期間,其開發(fā)由畢威拓贊助,從2015年6月開始,Redis的開發(fā)由Redis Labs贊助。

 

Redis面試熱點(diǎn)之底層實(shí)現(xiàn)篇

 

筆者也使用過一些其他的NoSQL,有的支持的value類型非常單一,因此很多操作都必須在客戶端實(shí)現(xiàn),比如value是一個(gè)結(jié)構(gòu)化的數(shù)據(jù),需要修改其中某個(gè)字段就需要整體讀出來修改再整體寫入,顯得很笨重,但是Redis的value支持多種類型,實(shí)現(xiàn)了很多操作在服務(wù)端就可以完成了,這個(gè)對客戶端而言非常方便。

當(dāng)然Redis由于是內(nèi)存型的數(shù)據(jù)庫,數(shù)據(jù)量存儲(chǔ)量有限而且分布式集群成本也會(huì)非常高,因此有很多公司開發(fā)了基于SSD的類Redis系統(tǒng),比如360開發(fā)的SSDB、Pika等數(shù)據(jù)庫,但是筆者認(rèn)為從0到1的難度是大于從1到2的難度的,毋庸置疑Redis是NoSQL中濃墨重彩的一筆,值得我們?nèi)ド钊胙芯亢褪褂谩?/p>

2.Redis的江湖地位

Redis提供了Java、C/C++、C#、 PHP 、JavaScript、 Perl 、Object-C、Python、Ruby、Erlang、Golang等多種主流語言的客戶端,因此無論使用者是什么語言棧總會(huì)找到屬于自己的那款客戶端,受眾非常廣。

筆者查了http://datanyze.com網(wǎng)站看了下Redis和MySQL的最新市場份額和排名對比以及全球Top站點(diǎn)的部署量對比(網(wǎng)站數(shù)據(jù)更新到寫作當(dāng)日2019.12.11):

 

Redis面試熱點(diǎn)之底層實(shí)現(xiàn)篇

 

 

Redis面試熱點(diǎn)之底層實(shí)現(xiàn)篇

 

可以看到Redis總體份額排名第9并且在全球Top100站點(diǎn)中部署數(shù)量與MySQL基本持平,所以Redis還是有一定的江湖地位的。

3.聊聊實(shí)戰(zhàn)

目前Redis發(fā)布的穩(wěn)定版本已經(jīng)到了5.x,功能也越來越強(qiáng)大,從國內(nèi)外互聯(lián)網(wǎng)公司來看Redis幾乎是標(biāo)配了。作為開發(fā)人員在日常筆試面試和工作中遇到Redis相關(guān)問題的概率非常大,掌握Redis的相關(guān)知識(shí)點(diǎn)都十分有必要。

學(xué)習(xí)和梳理一個(gè)復(fù)雜的東西肯定不能胡子眉毛一把抓,每個(gè)人都有自己的認(rèn)知思路,筆者認(rèn)為要從充分掌握Redis需要從底向上、從外到內(nèi)去理解Redis。

Redis的實(shí)戰(zhàn)知識(shí)點(diǎn)可以簡單分為三個(gè)層次:

  • 底層實(shí)現(xiàn):主要是從Redis的源碼中提煉的問題,包括但不限于底層數(shù)據(jù)結(jié)構(gòu)、服務(wù)模型、算法設(shè)計(jì)等。
  • 基礎(chǔ)架構(gòu):可用概況為Redis整體對外的功能點(diǎn)和表現(xiàn),包括但不限于單機(jī)版主從架構(gòu)實(shí)現(xiàn)、主從數(shù)據(jù)同步、哨兵機(jī)制、集群實(shí)現(xiàn)、分布式一致性、故障遷移等。
  • 實(shí)際應(yīng)用:實(shí)戰(zhàn)中Redis可用幫你做什么,包括但不限于單機(jī)緩存、分布式緩存、分布式鎖、一些應(yīng)用。

 

Redis面試熱點(diǎn)之底層實(shí)現(xiàn)篇

 

深入理解和熟練使用Redis需要時(shí)間錘煉,要做到信手拈來著實(shí)不易,想在短時(shí)間內(nèi)突破只能從熱點(diǎn)題目入手,雖然這樣感覺有些功利,不過也算無可厚非吧,為了吃飯我們還是傾向于原諒懶惰的自己,要不然吃土喝風(fēng)?

 

[[327907]]

 

4.底層實(shí)現(xiàn)熱點(diǎn)題目

底層實(shí)現(xiàn)篇的題目主要是與Redis的源碼和設(shè)計(jì)相關(guān),可以說是Redis功能的基石,了解底層實(shí)現(xiàn)可以讓我們更好地掌握功能,由于底層代碼很多,在后續(xù)的基礎(chǔ)架構(gòu)篇中仍然會(huì)穿插源碼來分析,因此本篇只列舉一些熱點(diǎn)的問題。

Q1: Redis常用五種數(shù)據(jù)類型是如何實(shí)現(xiàn)的?

Redis支持的常用5種數(shù)據(jù)類型指的是value類型,分別為:字符串String、列表List、哈希Hash、集合Set、有序集合Zset,但是Redis后續(xù)又豐富了幾種數(shù)據(jù)類型分別是Bitmaps、HyperLogLogs、GEO。

由于Redis是基于標(biāo)準(zhǔn)C寫的,只有最基礎(chǔ)的數(shù)據(jù)類型,因此Redis為了滿足對外使用的5種數(shù)據(jù)類型,開發(fā)了屬于自己獨(dú)有的一套基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),使用這些數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)5種數(shù)據(jù)類型。

Redis底層的數(shù)據(jù)結(jié)構(gòu)包括:簡單動(dòng)態(tài)數(shù)組SDS、鏈表、哈希表、跳躍鏈表、整數(shù)集合、壓縮列表、對象。

Redis為了平衡空間和時(shí)間效率,針對value的具體類型在底層會(huì)采用不同的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn),其中哈希表和壓縮列表是復(fù)用比較多的數(shù)據(jù)結(jié)構(gòu),如下圖展示了對外數(shù)據(jù)類型和底層數(shù)據(jù)結(jié)構(gòu)之間的映射關(guān)系:

 

Redis面試熱點(diǎn)之底層實(shí)現(xiàn)篇

 

 

Redis面試熱點(diǎn)之底層實(shí)現(xiàn)篇

 

從圖中可以看到ziplist壓縮列表可以作為Zset、Set、List三種數(shù)據(jù)類型的底層實(shí)現(xiàn),看來很強(qiáng)大,壓縮列表是一種為了節(jié)約內(nèi)存而開發(fā)的且經(jīng)過特殊編碼之后的連續(xù)內(nèi)存塊順序型數(shù)據(jù)結(jié)構(gòu),底層結(jié)構(gòu)還是比較復(fù)雜的。

Q2: Redis的SDS和C中字符串相比有什么優(yōu)勢?

在C語言中使用N+1長度的字符數(shù)組來表示字符串,尾部使用'\0'作為結(jié)尾標(biāo)志,對于此種實(shí)現(xiàn)無法滿足Redis對于安全性、效率、豐富的功能的要求,因此Redis單獨(dú)封裝了SDS簡單動(dòng)態(tài)字符串結(jié)構(gòu)。

在理解SDS的優(yōu)勢之前需要先看下SDS的實(shí)現(xiàn)細(xì)節(jié),找了github最新的src/sds.h的定義看下:

看了前面的定義,筆者畫了個(gè)圖:

 

Redis面試熱點(diǎn)之底層實(shí)現(xiàn)篇

 

從圖中可以知道sds本質(zhì)分為三部分:header、buf、null結(jié)尾符,其中header可以認(rèn)為是整個(gè)sds的指引部分,給定了使用的空間大小、最大分配大小等信息,再用一張網(wǎng)上的圖來清晰看下sdshdr8的實(shí)例:

 

Redis面試熱點(diǎn)之底層實(shí)現(xiàn)篇

 

在sds.h/sds.c源碼中可清楚地看到sds完整的實(shí)現(xiàn)細(xì)節(jié),本文就不展開了要不然篇幅就過長了,快速進(jìn)入主題說下sds的優(yōu)勢:

  • O(1)獲取長度: C字符串需要遍歷而sds中有l(wèi)en可以直接獲得;
  • 防止緩沖區(qū)溢出bufferoverflow: 當(dāng)sds需要對字符串進(jìn)行修改時(shí),首先借助于len和alloc檢查空間是否滿足修改所需的要求,如果空間不夠的話,SDS會(huì)自動(dòng)擴(kuò)展空間,避免了像C字符串操作中的覆蓋情況;
  • 有效降低內(nèi)存分配次數(shù):C字符串在涉及增加或者清除操作時(shí)會(huì)改變底層數(shù)組的大小造成重新分配、sds使用了空間預(yù)分配和惰性空間釋放機(jī)制,說白了就是每次在擴(kuò)展時(shí)是成倍的多分配的,在縮容是也是先留著并不正式歸還給OS,這兩個(gè)機(jī)制也是比較好理解的;

二進(jìn)制安全:C語言字符串只能保存ascii碼,對于圖片、音頻等信息無法保存,sds是二進(jìn)制安全的,寫入什么讀取就是什么,不做任何過濾和限制;

老規(guī)矩上一張黃健宏大神總結(jié)好的圖:

 

Redis面試熱點(diǎn)之底層實(shí)現(xiàn)篇

 

Q3:Redis的字典是如何實(shí)現(xiàn)的?簡述漸進(jìn)式rehash的過程。

字典算是Redis5中常用數(shù)據(jù)類型中的明星成員了,前面說過字典可以基于ziplist和hashtable來實(shí)現(xiàn),我們只討論基于hashtable實(shí)現(xiàn)的原理。

字典是個(gè)層次非常明顯的數(shù)據(jù)類型,如圖:

 

Redis面試熱點(diǎn)之底層實(shí)現(xiàn)篇

 

有了個(gè)大概的概念,我們看下最新的src/dict.h源碼定義:

  1. //哈希節(jié)點(diǎn)結(jié)構(gòu) 
  2. typedef struct dictEntry { 
  3.  void *key
  4.  union { 
  5.  void *val; 
  6.  uint64_t u64; 
  7.  int64_t s64; 
  8.  double d; 
  9.  } v; 
  10.  struct dictEntry *next
  11. } dictEntry; 
  12.  
  13. //封裝的是字典的操作函數(shù)指針 
  14. typedef struct dictType { 
  15.  uint64_t (*hashFunction)(const void *key); 
  16.  void *(*keyDup)(void *privdata, const void *key); 
  17.  void *(*valDup)(void *privdata, const void *obj); 
  18.  int (*keyCompare)(void *privdata, const void *key1, const void *key2); 
  19.  void (*keyDestructor)(void *privdata, void *key); 
  20.  void (*valDestructor)(void *privdata, void *obj); 
  21. } dictType; 
  22.  
  23. /* This is our hash table structure. Every dictionary has two of this as we 
  24.  * implement incremental rehashing, for the old to the new table. */ 
  25. //哈希表結(jié)構(gòu) 該部分是理解字典的關(guān)鍵 
  26. typedef struct dictht { 
  27.  dictEntry **table
  28.  unsigned long size
  29.  unsigned long sizemask; 
  30.  unsigned long used; 
  31. } dictht; 
  32.  
  33. //字典結(jié)構(gòu) 
  34. typedef struct dict { 
  35.  dictType *type; 
  36.  void *privdata; 
  37.  dictht ht[2]; 
  38.  long rehashidx; /* rehashing not in progress if rehashidx == -1 */ 
  39.  unsigned long iterators; /* number of iterators currently running */ 
  40. } dict; 

C語言的好處在于定義必須是由最底層向外的,因此我們可以看到一個(gè)明顯的層次變化,于是筆者又畫一圖來展現(xiàn)具體的層次概念:

 

Redis面試熱點(diǎn)之底層實(shí)現(xiàn)篇

 

  • 關(guān)于dictEntry

dictEntry是哈希表節(jié)點(diǎn),也就是我們存儲(chǔ)數(shù)據(jù)地方,其保護(hù)的成員有:key,v,next指針。key保存著鍵值對中的鍵,v保存著鍵值對中的值,值可以是一個(gè)指針或者是uint64_t或者是int64_t。next是指向另一個(gè)哈希表節(jié)點(diǎn)的指針,這個(gè)指針可以將多個(gè)哈希值相同的鍵值對連接在一次,以此來解決哈希沖突的問題。

如圖為兩個(gè)沖突的哈希節(jié)點(diǎn)的連接關(guān)系:

 

Redis面試熱點(diǎn)之底層實(shí)現(xiàn)篇

 

  • 關(guān)于dictht

從源碼看哈希表包括的成員有table、size、used、sizemask。table是一個(gè)數(shù)組,數(shù)組中的每個(gè)元素都是一個(gè)指向dictEntry結(jié)構(gòu)的指針, 每個(gè)dictEntry結(jié)構(gòu)保存著一個(gè)鍵值對;size 屬性記錄了哈希表table的大小,而used屬性則記錄了哈希表目前已有節(jié)點(diǎn)的數(shù)量。sizemask等于size-1和哈希值計(jì)算一個(gè)鍵在table數(shù)組的索引,也就是計(jì)算index時(shí)用到的。

 

Redis面試熱點(diǎn)之底層實(shí)現(xiàn)篇

 

如上圖展示了一個(gè)大小為4的table中的哈希節(jié)點(diǎn)情況,其中k1和k0在index=2發(fā)生了哈希沖突,進(jìn)行開鏈表存在,本質(zhì)上是先存儲(chǔ)的k0,k1放置是發(fā)生沖突為了保證效率直接放在沖突鏈表的最前面,因?yàn)樵撴湵頉]有尾指針。

  • 關(guān)于dict

從源碼中看到dict結(jié)構(gòu)體就是字典的定義,包含的成員有type,privdata、ht、rehashidx。其中dictType指針類型的type指向了操作字典的api,理解為函數(shù)指針即可,ht是包含2個(gè)dictht的數(shù)組,也就是字典包含了2個(gè)哈希表,rehashidx進(jìn)行rehash時(shí)使用的變量,privdata配合dictType指向的函數(shù)作為參數(shù)使用,這樣就對字典的幾個(gè)成員有了初步的認(rèn)識(shí)。

 

Redis面試熱點(diǎn)之底層實(shí)現(xiàn)篇

 

字典的哈希算法

redis使用MurmurHash算法計(jì)算哈希值,該算法最初由Austin Appleby在2008年發(fā)明,MurmurHash算法的無論數(shù)據(jù)輸入情況如何都可以給出隨機(jī)分布性較好的哈希值并且計(jì)算速度非常快,目前有MurmurHash2和MurmurHash3等版本。

普通Rehash重新散列

哈希表保存的鍵值對數(shù)量是動(dòng)態(tài)變化的,為了讓哈希表的負(fù)載因子維持在一個(gè)合理的范圍之內(nèi),就需要對哈希表進(jìn)行擴(kuò)縮容。

擴(kuò)縮容是通過執(zhí)行rehash重新散列來完成,對字典的哈希表執(zhí)行普通rehash的基本步驟為分配空間->逐個(gè)遷移->交換哈希表,詳細(xì)過程如下:

1.為字典的ht[1]哈希表分配空間,分配的空間大小取決于要執(zhí)行的操作以及ht[0]當(dāng)前包含的鍵值對數(shù)量:

擴(kuò)展操作時(shí)ht[1]的大小為第一個(gè)大于等于ht[0].used*2的2^n;

收縮操作時(shí)ht[1]的大小為第一個(gè)大于等于ht[0].used的2^n ;

擴(kuò)展時(shí)比如h[0].used=200,那么需要選擇大于400的第一個(gè)2的冪,也就是2^9=512。

2.將保存在ht[0]中的所有鍵值對重新計(jì)算鍵的哈希值和索引值rehash到ht[1]上;

3.重復(fù)rehash直到ht[0]包含的所有鍵值對全部遷移到了ht[1]之后釋放 ht[0], 將ht[1]設(shè)置為 ht[0],并在ht[1]新創(chuàng)建一個(gè)空白哈希表, 為下一次rehash做準(zhǔn)備。

  • 漸進(jìn)Rehash過程

Redis的rehash動(dòng)作并不是一次性完成的,而是分多次、漸進(jìn)式地完成的,原因在于當(dāng)哈希表里保存的鍵值對數(shù)量很大時(shí), 一次性將這些鍵值對全部rehash到ht[1]可能會(huì)導(dǎo)致服務(wù)器在一段時(shí)間內(nèi)停止服務(wù),這個(gè)是無法接受的。

針對這種情況Redis采用了漸進(jìn)式rehash,過程的詳細(xì)步驟:

  1. 為ht[1]分配空間,這個(gè)過程和普通Rehash沒有區(qū)別;
  2. 將rehashidx設(shè)置為0,表示rehash工作正式開始,同時(shí)這個(gè)rehashidx是遞增的,從0開始表示從數(shù)組第一個(gè)元素開始rehash。
  3. 在rehash進(jìn)行期間,每次對字典執(zhí)行增刪改查操作時(shí),順帶將ht[0]哈希表在rehashidx索引上的鍵值對rehash到 ht[1],完成后將rehashidx加1,指向下一個(gè)需要rehash的鍵值對。
  4. 隨著字典操作的不斷執(zhí)行,最終ht[0]的所有鍵值對都會(huì)被rehash至ht[1],再將rehashidx屬性的值設(shè)為-1來表示 rehash操作已完成。

漸進(jìn)式 rehash的思想在于將rehash鍵值對所需的計(jì)算工作分散到對字典的每個(gè)添加、刪除、查找和更新操作上,從而避免了集中式rehash而帶來的阻塞問題。

看到這里不禁去想這種捎帶腳式的rehash會(huì)不會(huì)導(dǎo)致整個(gè)過程非常漫長?如果某個(gè)value一直沒有操作那么需要擴(kuò)容時(shí)由于一直不用所以影響不大,需要縮容時(shí)如果一直不處理可能造成內(nèi)存浪費(fèi),具體的還沒來得及研究,先埋個(gè)問題吧!

 

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2013-03-19 10:29:49

MySQLMySQL ProxyMySQL底層

2015-09-09 10:34:58

底層網(wǎng)絡(luò)技術(shù)網(wǎng)絡(luò)技術(shù)

2024-11-22 15:00:00

開源Redis鏈表

2020-05-14 11:19:19

降序索引子集

2021-08-29 07:41:48

數(shù)據(jù)HashMap底層

2023-03-01 22:28:15

Redis高可用

2021-08-31 07:36:22

LinkedListAndroid數(shù)據(jù)結(jié)構(gòu)

2023-01-04 07:54:03

HashMap底層JDK

2021-03-28 21:33:07

Redis熱點(diǎn)key

2025-08-26 02:15:00

Redis字符串)SDS

2021-09-28 09:36:13

redisHash結(jié)構(gòu)

2023-10-31 15:08:56

WorkBoxServiceWorker

2022-11-15 08:10:23

SpringMyBatis底層

2019-06-21 15:20:05

Redis數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)庫

2020-03-20 10:47:51

Redis數(shù)據(jù)庫字符串

2022-12-19 08:00:00

SpringBootWeb開發(fā)

2014-11-26 10:44:33

DockerOpenStack云計(jì)算

2019-06-12 22:51:57

Redis軟件開發(fā)

2023-07-17 08:32:40

2024-04-11 11:04:05

Redis
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

三级网站免费观看| 九九热最新地址| 日本一区免费网站| 中文字幕一区二区三中文字幕| 成人春色激情网| 久久久国产成人| 伊甸园亚洲一区| 欧美日韩欧美一区二区| 免费高清一区二区三区| 国产黄色片在线播放| 国产老肥熟一区二区三区| 性欧美亚洲xxxx乳在线观看| 免费一级特黄3大片视频| 精品成人18| 欧美性xxxx| 91精品一区二区三区四区| 免费人成在线观看网站| 激情成人午夜视频| 日产精品99久久久久久| 欧美日韩亚洲国产另类| 视频一区在线观看| 精品久久久网站| 超碰成人在线播放| 欧美aa一级| 一区二区在线观看视频在线观看| 欧美精品国产精品久久久 | 粗大的内捧猛烈进出视频| 老司机成人影院| 亚洲一区二区三区三| 日韩一区二区电影在线观看| 神马午夜电影一区二区三区在线观看| 久久99蜜桃精品| 日韩免费中文字幕| 国产五月天婷婷| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 懂色av粉嫩av蜜乳av| 国产精品一区三区在线观看| 在线影视一区二区三区| 日本韩国欧美在线观看| 自拍亚洲图区| 国产精品高潮呻吟| 午夜精品视频在线观看一区二区| 午夜av免费观看| 盗摄精品av一区二区三区| 成人免费看黄网站| 亚洲图片在线播放| 日本欧美一区二区| 国产成人精品午夜| 日韩黄色在线视频| 精品成人在线| 久久久久久久久中文字幕| 全网免费在线播放视频入口| 色爱综合网欧美| 一区二区三区视频在线| 亚洲成人黄色av| 欧美美乳视频| 亚洲午夜女主播在线直播| 加勒比精品视频| 女仆av观看一区| 亚洲高清av在线| 中国xxxx性xxxx产国| 国产成人精品福利| 亚洲精品动漫久久久久| 中文字幕乱码在线| 五月天亚洲一区| 日韩二区三区在线| 亚洲成人av免费在线观看| 日韩啪啪网站| 国产亚洲精品成人av久久ww| 亚洲人成人无码网www国产 | 国产成人午夜视频| 成人午夜在线影院| va视频在线观看| 高清shemale亚洲人妖| 国产一区二区三区四区五区加勒比| 日本波多野结衣在线| 91在线国产观看| 日产精品久久久一区二区| av网站大全在线观看| 最好看的中文字幕久久| 五月天激情图片| tube8在线hd| 色综合天天性综合| 九色porny自拍| 日本免费一区二区三区视频| 精品国免费一区二区三区| 国产成人无码一区二区在线观看| 国产一区二区观看| 久久精品国产久精国产一老狼| 亚洲色图综合区| 99成人免费视频| 国产97免费视| 国内精品国产成人国产三级| 91在线国内视频| 一区二区三区一级片| 日韩123区| 在线观看免费成人| 波多野吉衣在线视频| 天天操综合520| 日韩一区二区精品视频| 日韩伦人妻无码| 日本亚洲三级在线| 国产亚洲第一区| 91大神xh98hx在线播放| 午夜亚洲国产au精品一区二区| 亚洲男人天堂色| 福利片一区二区| 在线看国产精品| 国产在线视频你懂的| 日韩不卡手机在线v区| 国产 高清 精品 在线 a| 国产精品一级伦理| 精品久久久久久国产91| 亚洲精品中文字幕乱码无线| 你微笑时很美电视剧整集高清不卡 | 夜夜嗨av一区二区三区中文字幕| 国产综合免费视频| 日韩一区免费| 中文字幕亚洲综合久久| 九九热在线免费观看| 国内精品久久久久影院薰衣草| 久久久水蜜桃| 欧美xxx黑人xxx水蜜桃| 欧美乱熟臀69xxxxxx| 双性尿奴穿贞c带憋尿| 午夜精品久久99蜜桃的功能介绍| 国产91免费看片| 日本黄色三级视频| 亚洲美女屁股眼交3| 乌克兰美女av| 欧美极品在线观看| 2019日本中文字幕| 囯产精品一品二区三区| 亚洲欧美日韩国产中文在线| 超碰超碰在线观看| 欧美女优在线视频| 国产91精品高潮白浆喷水| 亚洲av色香蕉一区二区三区| 亚洲色图一区二区三区| 一道本在线免费视频| 欧美精选一区二区三区| 欧美在线视频a| 无码h黄肉3d动漫在线观看| 一区二区国产盗摄色噜噜| 久久精品一卡二卡| 99精品全国免费观看视频软件| 国产精品福利在线观看网址| 日韩av视屏| 欧美午夜影院在线视频| 久久精品国产亚洲av久| 久久久久久色| 天天人人精品| 久久99国产精品二区高清软件| 在线国产精品播放| 中文字幕在线网站| 中文字幕av不卡| 国产九九在线视频| 欧美hd在线| 成人日韩在线电影| 精品国产白色丝袜高跟鞋| 欧美日韩aaa| 九九热最新地址| 国产福利91精品| 成年女人18级毛片毛片免费| 精品精品国产毛片在线看| 81精品国产乱码久久久久久| 亚州精品国产精品乱码不99按摩| 色婷婷综合久色| 欧美成人另类视频| 国产一区二区三区精品视频| 草草草视频在线观看| 高潮久久久久久久久久久久久久| 97精品在线观看| 青青久草在线| 欧美剧情片在线观看| 青青草在线观看视频| 成人免费高清在线| 干日本少妇首页| 日本一区二区免费高清| 99超碰麻豆| 英国三级经典在线观看| 国产一区二区三区直播精品电影| 97在线公开视频| 亚洲午夜久久久久久久久电影院 | 国产精品视频麻豆| 亚洲无在线观看| 亚洲网站在线| 欧洲久久久久久| 欧美激情福利| 国产做受69高潮| 黄色片免费在线| 欧美一区二区三区免费在线看| 好吊操这里只有精品| 久久精品视频一区| 韩国三级在线播放| 久久经典综合| 91免费版看片| 国产一区二区三区站长工具| 91九色极品视频| 三上悠亚一区二区| 色综合男人天堂| 国产特黄在线| 亚洲激情自拍图| 亚洲在线免费观看视频| 亚洲国产aⅴ天堂久久| 懂色av蜜臀av粉嫩av永久| 99re这里只有精品6| 一女二男3p波多野结衣| 亚洲一区免费| 在线观看污视频| 波多野结衣在线播放一区| 国产精品午夜av在线| 99亚洲伊人久久精品影院| 午夜精品一区二区三区在线视频 | 波多野结衣50连登视频| 亚洲va在线| 日韩精品最新在线观看| 粉嫩久久久久久久极品| 91在线中文字幕| 国产极品久久久久久久久波多结野 | 9a蜜桃久久久久久免费| 久久电影天堂| 欧美在线一区二区视频| 俄罗斯一级**毛片在线播放| y97精品国产97久久久久久| 黄色片在线免费观看| 精品视频在线导航| 丰满少妇高潮在线观看| 91精品国产乱码久久蜜臀| 中文人妻熟女乱又乱精品| 色乱码一区二区三区88| 国产成人无码精品久在线观看 | 日本肉肉一区| 欧美与黑人午夜性猛交久久久| 国产视频一区二区三区在线播放| 久久天堂电影| 亚洲第一区中文字幕| 国产精品高潮呻吟AV无码| 在线观看精品一区| 黄色av一级片| 色婷婷久久久亚洲一区二区三区| 成人免费a视频| 天天综合天天综合色| 亚洲精品在线观看av| 亚洲综合精品久久| 欧美精品99久久久| 一区二区久久久| 清纯粉嫩极品夜夜嗨av| 亚洲欧美激情小说另类| 免费在线观看一级片| 亚洲男人的天堂av| 成年人av电影| 亚洲综合在线第一页| 国产亚洲精品码| 午夜激情一区二区三区| 久久久久99精品| 香蕉av福利精品导航| 亚洲精品男人天堂| 欧美日韩国产精品专区 | 66视频精品| 9191国产视频| 国产一区亚洲| 欧美精品久久久久久久自慰| 99日韩精品| 久久无码高潮喷水| 国产日韩欧美视频在线观看| 国产成人高清视频| 国产在线a视频| 从欧美一区二区三区| 一级特黄a大片免费| 久久久久国色av免费看影院| 亚洲精品91在线| 国产精品三级在线观看| 国产高潮流白浆| 亚洲电影第三页| 草久久免费视频| 在线视频观看一区| 国产免费一区二区三区最新不卡 | 欧美三级电影在线| 欧美性色黄大片人与善| 热久久天天拍国产| 国产在线无码精品| 国产精品腿扒开做爽爽爽挤奶网站| 国产精品wwwww| 激情综合色综合久久综合| 美女网站视频在线观看| 久久精品人人爽人人爽| 国产精品丝袜一区二区| 亚洲福利视频一区| 日韩精品在线一区二区三区| 欧美一区二区网站| 四虎成人免费在线| 久久精品99国产精品酒店日本| 青青青草视频在线| 日韩免费在线观看视频| 日韩中文字幕在线一区| 免费在线成人av电影| 久久久久久美女精品| 成人一区二区免费视频| 蜜臀av亚洲一区中文字幕| 95视频在线观看| 国产精品嫩草影院com| 日韩欧美亚洲国产| 欧美日韩高清一区二区| 色窝窝无码一区二区三区| 久久国产一区二区三区| 欧美一区久久久| 北条麻妃高清一区| 日韩在线观看| 亚洲美免无码中文字幕在线| 狠狠色狠狠色综合| 日韩成人在线视频| 国产精品一二三四五区| 亚洲国产中文字幕在线观看| 麻豆免费在线观看| 国产91色在线播放| 里番精品3d一二三区| 麻豆视频传媒入口| 免费成人av在线| 久久人人爽人人爽人人片| 亚洲黄一区二区三区| 91麻豆精品在线| 日韩大陆毛片av| 欧美性猛片xxxxx免费中国| 国产日韩精品在线| 欧美美女视频| 农村妇女精品一二区| www.视频一区| 免费人成在线观看| 91精品在线一区二区| 北岛玲日韩精品一区二区三区| 91av在线看| 高清精品视频| 日本阿v视频在线观看| 国产精品综合在线视频| 秋霞欧美一区二区三区视频免费| 欧美亚洲综合在线| 国产高清在线| 国产不卡在线观看| 精品在线99| 欧美激情国产精品日韩| 91丨porny丨中文| 国产成人精品片| 亚洲国产精品人久久电影| 毛片在线导航| 俄罗斯精品一区二区| 欧美天天视频| 波多野结衣中文字幕在线播放| 亚洲日本在线看| av av片在线看| 九九久久久久99精品| 日本一区二区三区视频在线看| 美女黄色片网站| 国产aⅴ精品一区二区四区| 日韩一区二区视频在线观看| 污污网站在线免费观看| 欧美一区二区视频97| 亚洲动漫在线观看| 日韩免费毛片视频| 国产欧美日韩视频一区二区| 樱花视频在线免费观看| 一区二区三欧美| 四虎影视国产精品| 在线视频一二三区| 国产精品99久久不卡二区| 免费人成年激情视频在线观看| 亚洲精品一区二区三区福利| 欧亚av在线| 茄子视频成人在线观看| 麻豆精品蜜桃视频网站| 97久久国产亚洲精品超碰热| 激情综合亚洲精品| 欧美日韩在线国产| 亚洲第一区在线观看| а√天堂8资源在线| 欧美极品一区二区| 久久99日本精品| 国内偷拍精品视频| 亚洲精品不卡在线| 影视一区二区三区| 永久免费在线看片视频| 成人午夜精品在线| 国产性生活视频| 久久久精品国产一区二区| 国产精品1luya在线播放| 日本精品一区二区三区四区| 国产精品美女www爽爽爽| 国产夫妻性生活视频| 69视频在线播放| 久久中文字幕二区| 日本人妻一区二区三区| 天天操天天色综合| 在线观看免费网站黄| 国产一区二区三区奇米久涩| 日韩高清在线电影| 九九热精彩视频| 国产一区二区三区网站| 精品午夜av| 久久久久免费看黄a片app| 国产清纯白嫩初高生在线观看91 |