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

吃透了這些Redis知識點,面試官一定覺得你很NB

開發(fā) 后端 其他數(shù)據(jù)庫 Redis
redis里存的都是二進制數(shù)據(jù),其實就是字節(jié)數(shù)組(byte[]),這些字節(jié)數(shù)據(jù)是沒有數(shù)據(jù)類型的,只有把它們按照合理的格式解碼后,可以變成一個字符串,整數(shù)或對象,此時才具有數(shù)據(jù)類型。

 [[263444]]

是數(shù)據(jù)結構而非類型

很多文章都會說,redis支持5種常用的數(shù)據(jù)類型,這其實是存在很大的歧義。redis里存的都是二進制數(shù)據(jù),其實就是字節(jié)數(shù)組(byte[]),這些字節(jié)數(shù)據(jù)是沒有數(shù)據(jù)類型的,只有把它們按照合理的格式解碼后,可以變成一個字符串,整數(shù)或對象,此時才具有數(shù)據(jù)類型。

這一點必須要記住。所以任何東西只要能轉化成字節(jié)數(shù)組(byte[])的,都可以存到redis里。管你是字符串、數(shù)字、對象、圖片、聲音、視頻、還是文件,只要變成byte數(shù)組。

因此redis里的String指的并不是字符串,它其實表示的是一種最簡單的數(shù)據(jù)結構,即一個key只能對應一個value。這里的key和value都是byte數(shù)組,只不過key一般是由一個字符串轉換成的byte數(shù)組,value則根據(jù)實際需要而定。

在特定情況下,對value也會有一些要求,比如要進行自增或自減操作,那value對應的byte數(shù)組必須要能被解碼成一個數(shù)字才行,否則會報錯。

那么List這種數(shù)據(jù)結構,其實表示一個key可以對應多個value,且value之間是有先后順序的,value值可以重復。

Set這種數(shù)據(jù)結構,表示一個key可以對應多個value,且value之間是沒有先后順序的,value值也不可以重復。

Hash這種數(shù)據(jù)結構,表示一個key可以對應多個key-value對,此時這些key-value對之間的先后順序一般意義不大,這是一個按照名稱語義來訪問的數(shù)據(jù)結構,而非位置語義。

Sorted Set這種數(shù)據(jù)結構,表示一個key可以對應多個value,value之間是有大小排序的,value值不可以重復。每個value都和一個浮點數(shù)相關聯(lián),該浮點數(shù)叫score。元素排序規(guī)則是:先按score排序,再按value排序。

相信現(xiàn)在你對這5種數(shù)據(jù)結構有了更清晰的認識,那它們的對應命令對你來說就是小case了。

集群帶來的問題與解決思路

集群帶來的好處是顯而易見的,比如容量增加、處理能力增強,還可以按需要進行動態(tài)的擴容、縮容。但同時也會引入一些新的問題,至少會有下面這兩個。

一是數(shù)據(jù)分配:存數(shù)據(jù)時應該放到哪個節(jié)點上,取數(shù)據(jù)時應該去哪個節(jié)點上找。二是數(shù)據(jù)移動:集群擴容,新增加節(jié)點時,該節(jié)點上的數(shù)據(jù)從何處來;集群縮容,要剔除節(jié)點時,該節(jié)點上的數(shù)據(jù)往何處去。

上面這兩個問題有一個共同點就是,如何去描述和存儲數(shù)據(jù)與節(jié)點的映射關系。又因為數(shù)據(jù)的位置是由key決定的,所以問題就演變?yōu)槿绾谓⑵鸶鱾€key和集群所有節(jié)點的關聯(lián)關系。

集群的節(jié)點是相對固定和少數(shù)的,雖然有增加節(jié)點和剔除節(jié)點。但集群里存儲的key,則是完全隨機、沒有規(guī)律、不可預測、數(shù)量龐多,還非?,嵥?。

這就好比一所大學和它的所有學生之間的關系。如果大學和學生直接掛鉤的話,一定會比較混亂?,F(xiàn)實是它們之間又加入了好幾層,首先有院系,其次有專業(yè),再者有年級,***還有班級。經過這四層映射之后,關系就清爽很多了。

這其實是一個非常重要的結論,這個世界上沒有什么問題是不能通過加入一層來解決的。如果有,那就再加入一層。計算機里也是這樣的。

redis在數(shù)據(jù)和節(jié)點之間又加入了一層,把這層稱為槽(slot),因該槽主要和哈希有關,又叫哈希槽。

***變成了,節(jié)點上放的是槽,槽里放的是數(shù)據(jù)。槽解決的是粒度問題,相當于把粒度變大了,這樣便于數(shù)據(jù)移動。哈希解決的是映射問題,使用key的哈希值來計算所在的槽,便于數(shù)據(jù)分配。

可以這樣來理解,你的學習桌子上堆滿了書,亂的很,想找到某本書非常困難。于是你買了幾個大的收納箱,把這些書按照書名的長度放入不同的收納箱,然后把這些收納箱放到桌子上。

這樣就變成了,桌子上是收納箱,收納箱里是書籍。這樣書籍移動很方便,搬起一個箱子就走了。尋找書籍也很方便,只要數(shù)一數(shù)書名的長度,去對應的箱子里找就行了。

其實我們也沒做什么,只是買了幾個箱子,按照某種規(guī)則把書裝入箱子。就這么簡單的舉動,就徹底改變了原來一盤散沙的狀況。是不是有點小小的神奇呢。

一個集群只能有16384個槽,編號0-16383。這些槽會分配給集群中的所有主節(jié)點,分配策略沒有要求。可以指定哪些編號的槽分配給哪個主節(jié)點。集群會記錄節(jié)點和槽的對應關系。

接下來就需要對key求哈希值,然后對16384取余,余數(shù)是幾key就落入對應的槽里。slot = CRC16(key) % 16384。

以槽為單位移動數(shù)據(jù),因為槽的數(shù)目是固定的,處理起來比較容易,這樣數(shù)據(jù)移動問題就解決了。

使用哈希函數(shù)計算出key的哈希值,這樣就可以算出它對應的槽,然后利用集群存儲的槽和節(jié)點的映射關系查詢出槽所在的節(jié)點,于是數(shù)據(jù)和節(jié)點就映射起來了,這樣數(shù)據(jù)分配問題就解決了。

我想說的是,一般的人只會去學習各種技術,高手更在乎如何跳出技術,尋求一種解決方案或思路方向,順著這個方向走下去,八九不離十能找到你想要的答案。

集群對命令操作的取舍

客戶端只要和集群中的一個節(jié)點建立鏈接后,就可以獲取到整個集群的所有節(jié)點信息。此外還會獲取所有哈希槽和節(jié)點的對應關系信息,這些信息數(shù)據(jù)都會在客戶端緩存起來,因為這些信息相當有用。

客戶端可以向任何節(jié)點發(fā)送請求,那么拿到一個key后到底該向哪個節(jié)點發(fā)請求呢?其實就是把集群里的那套key和節(jié)點的映射關系理論搬到客戶端來就行了。

所以客戶端需要實現(xiàn)一個和集群端一樣的哈希函數(shù),先計算出key的哈希值,然后再對16384取余,這樣就找到了該key對應的哈希槽,利用客戶端緩存的槽和節(jié)點的對應關系信息,就可以找到該key對應的節(jié)點了。

接下來發(fā)送請求就可以了。還可以把key和節(jié)點的映射關系緩存起來,下次再請求該key時,直接就拿到了它對應的節(jié)點,不用再計算一遍了。

理論和現(xiàn)實總是有差距的,集群已經發(fā)生了變化,客戶端的緩存還沒來得及更新??隙〞霈F(xiàn)拿到一個key向對應的節(jié)點發(fā)請求,其實這個key已經不在那個節(jié)點上了。此時這個節(jié)點應該怎么辦?

這個節(jié)點可以去key實際所在的節(jié)點上拿到數(shù)據(jù)再返回給客戶端,也可以直接告訴客戶端key已經不在我這里了,同時附上key現(xiàn)在所在的節(jié)點信息,讓客戶端再去請求一次,類似于HTTP的302重定向。

這其實是個選擇問題,也是個哲學問題。結果就是redis集群選擇了后者。因此,節(jié)點只處理自己擁有的key,對于不擁有的key將返回重定向錯誤,即-MOVED key 127.0.0.1:6381,客戶端重新向這個新節(jié)點發(fā)送請求。

所以說選擇是一種哲學,也是個智慧。稍后再談這個問題。先來看看另一個情況,和這個問題有些相同點。

redis有一種命令可以一次帶多個key,如MGET,我把這些稱為多key命令。這個多key命令的請求被發(fā)送到一個節(jié)點上,這里有一個潛在的問題,不知道大家有沒有想到,就是這個命令里的多個key一定都位于那同一個節(jié)點上嗎?

就分為兩種情況了,如果多個key不在同一個節(jié)點上,此時節(jié)點只能返回重定向錯誤了,但是多個key完全可能位于多個不同的節(jié)點上,此時返回的重定向錯誤就會非常亂,所以redis集群選擇不支持此種情況。

如果多個key位于同一個節(jié)點上呢,理論上是沒有問題的,redis集群是否支持就和redis的版本有關系了,具體使用時自己測試一下就行了。

在這個過程中我們發(fā)現(xiàn)了一件頗有意義的事情,就是讓一組相關的key映射到同一個節(jié)點上是非常有必要的,這樣可以提高效率,通過多key命令一次獲取多個值。

那么問題來了,如何給這些key起名字才能讓他們落到同一個節(jié)點上,難不成都要先計算個哈希值,再取個余數(shù),太麻煩了吧。當然不是這樣了,redis已經幫我們想好了。

可以來簡單推理下,要想讓兩個key位于同一個節(jié)點上,它們的哈希值必須要一樣。要想哈希值一樣,傳入哈希函數(shù)的字符串必須一樣。那我們只能傳進去兩個一模一樣的字符串了,那不就變成同一個key了,后面的會覆蓋前面的數(shù)據(jù)。

這里的問題是我們都是拿整個key去計算哈希值,這就導致key和參與計算哈希值的字符串耦合了,需要將它們解耦才行,就是key和參與計算哈希值的字符串有關但是又不一樣。

redis基于這個原理為我們提供了方案,叫做key哈希標簽。先看例子,{user1000}.following,{user1000}.followers,相信你已經看出了門道,就是僅使用Key中的位于{和}間的字符串參與計算哈希值。

這樣可以保證哈希值相同,落到相同的節(jié)點上。但是key又是不同的,不會互相覆蓋。使用哈希標簽把一組相關的key關聯(lián)了起來,問題就這樣被輕松愉快地解決了。

相信你已經發(fā)現(xiàn)了,要解決問題靠的是巧妙的奇思妙想,而不是非要用牛逼的技術牛逼的算法。這就是小強,小而強大。

***再來談選擇的哲學。redis的核心就是以最快的速度進行常用數(shù)據(jù)結構的key/value存取,以及圍繞這些數(shù)據(jù)結構的運算。對于與核心無關的或會拖累核心的都選擇弱化處理或不處理,這樣做是為了保證核心的簡單、快速和穩(wěn)定。

其實就是在廣度和深度面前,redis選擇了深度。所以節(jié)點不去處理自己不擁有的key,集群不去支持多key命令。這樣一方面可以快速地響應客戶端,另一方面可以避免在集群內部有大量的數(shù)據(jù)傳輸與合并。

單線程模型

redis集群的每個節(jié)點里只有一個線程負責接受和執(zhí)行所有客戶端發(fā)送的請求。技術上使用多路復用I/O,使用Linux的epoll函數(shù),這樣一個線程就可以管理很多socket連接。

除此之外,選擇單線程還有以下這些原因:

1、redis都是對內存的操作,速度極快(10W+QPS)

2、整體的時間主要都是消耗在了網(wǎng)絡的傳輸上

3、如果使用了多線程,則需要多線程同步,這樣實現(xiàn)起來會變的復雜

4、線程的加鎖時間甚至都超過了對內存操作的時間

5、多線程上下文頻繁的切換需要消耗更多的CPU時間

6、還有就是單線程天然支持原子操作,而且單線程的代碼寫起來更簡單

事務

事務大家都知道,就是把多個操作捆綁在一起,要么都執(zhí)行(成功了),要么一個也不執(zhí)行(回滾了)。redis也是支持事務的,但可能和你想要的不太一樣,一起來看看吧。

redis的事務可以分為兩步,定義事務和執(zhí)行事務。使用multi命令開啟一個事務,然后把要執(zhí)行的所有命令都依次排上去。這就定義好了一個事務。此時使用exec命令來執(zhí)行這個事務,或使用discard命令來放棄這個事務。

你可能希望在你的事務開始前,你關心的key不想被別人操作,那么可以使用watch命令來監(jiān)視這些key,如果開始執(zhí)行前這些key被其它命令操作了則會取消事務的。也可以使用unwatch命令來取消對這些key的監(jiān)視。

redis事務具有以下特點:

1、如果開始執(zhí)行事務前出錯,則所有命令都不執(zhí)行

2、一旦開始,則保證所有命令一次性按順序執(zhí)行完而不被打斷

3、如果執(zhí)行過程中遇到錯誤,會繼續(xù)執(zhí)行下去,不會停止的

4、對于執(zhí)行過程中遇到錯誤,是不會進行回滾的

看完這些,真想問一句話,你這能叫事務嗎?很顯然,這并不是我們通常認為的事務,因為它連原子性都保證不了。保證不了原子性是因為redis不支持回滾,不過它也給出了不支持的理由。

不支持回滾的理由:

1、redis認為,失敗都是由命令使用不當造成

2、redis這樣做,是為了保持內部實現(xiàn)簡單快速

3、redis還認為,回滾并不能解決所有問題

哈哈,這就是霸王條款,因此,好像使用redis事務的不太多

管道

客戶端和集群的交互過程是串行化阻塞式的,即客戶端發(fā)送了一個命令后必須等到響應回來后才能發(fā)第二個命令,這一來一回就是一個往返時間。如果你有很多的命令,都這樣一個一個的來進行,會變得很慢。

redis提供了一種管道技術,可以讓客戶端一次發(fā)送多個命令,期間不需要等待服務器端的響應,等所有的命令都發(fā)完了,再依次接收這些命令的全部響應。這就極大地節(jié)省了許多時間,提升了效率。

聰明的你是不是意識到了另外一個問題,多個命令就是多個key啊,這不就是上面提到的多key操作嘛,那么問題來了,你如何保證這多個key都是同一個節(jié)點上的啊,哈哈,redis集群又放棄了對管道的支持。

不過可以在客戶端模擬實現(xiàn),就是使用多個連接往多個節(jié)點同時發(fā)送命令,然后等待所有的節(jié)點都返回了響應,再把它們按照發(fā)送命令的順序整理好,返回給用戶代碼。哎呀,好麻煩呀。

協(xié)議

簡單了解下redis的協(xié)議,知道redis的數(shù)據(jù)傳輸格式。

發(fā)送請求的協(xié)議:

*參數(shù)個數(shù)CRLF$參數(shù)1的字節(jié)數(shù)CRLF參數(shù)1的數(shù)據(jù)CRLF...$參數(shù)N的字節(jié)數(shù)CRLF參數(shù)N的數(shù)據(jù)CRLF

例如,SET name lixinjie,實際發(fā)送的數(shù)據(jù)是:

*3\r\n$3\r\nSET\r\n$4\r\nname\r\n$8\r\nlixinjie\r\n

接受響應的協(xié)議:

單行回復,***個字節(jié)是+

錯誤消息,***個字節(jié)是-

整型數(shù)字,***個字節(jié)是:

批量回復,***個字節(jié)是$

多個批量回復,***個字節(jié)是*

例如,

+OK\r\n

-ERR Operation against\r\n

:1000\r\n

$6\r\nfoobar\r\n

*2\r\n$3\r\nfoo\r\n$3\r\nbar\r\n

可見redis的協(xié)議設計的非常簡單。

責任編輯:龐桂玉 來源: Java團長
相關推薦

2019-11-21 10:59:16

IPv4IPv6網(wǎng)絡

2019-10-24 09:09:28

MySQLACIDJava

2019-11-25 21:46:12

數(shù)據(jù)湖云計算數(shù)據(jù)倉庫

2024-02-26 08:19:00

WebSpring容器

2024-09-26 00:00:05

2015-08-13 10:29:12

面試面試官

2021-11-16 07:31:59

JavaJDK 7 String

2023-02-15 08:12:19

http超時過濾器

2025-01-09 12:15:16

2020-05-09 08:31:16

IPv4IPv6網(wǎng)絡

2021-05-17 06:02:58

Css前端CSS 特效

2022-08-23 09:48:13

面試JavaScriptoffer

2021-03-02 12:27:55

操作系統(tǒng)面試

2020-12-23 13:29:15

微服務架構面試官

2020-08-04 14:00:17

分庫分表數(shù)據(jù)庫MySQL

2020-04-20 08:35:48

HTTP HTTPS網(wǎng)絡協(xié)議

2021-12-13 11:54:13

SetEs6接口

2021-11-02 09:05:25

Redis

2010-08-18 10:52:46

Linux筆試

2024-04-03 00:00:00

Redis集群代碼
點贊
收藏

51CTO技術棧公眾號

一区二区三区四区视频| 日韩欧美国产成人| 国产精品视频入口| 国产三区在线视频| 黄色片在线播放| 精品系列免费在线观看| 久久久亚洲欧洲日产国码aⅴ| 成人性生活免费看| 色综合一区二区日本韩国亚洲| 亚洲欧美另类小说视频| 久久久久久a亚洲欧洲aⅴ| 在线播放国产一区| 亚洲高清不卡| 精品国产拍在线观看| 日韩aaaaa| 成人高清一区| jizz一区二区| 免费不卡在线观看av| 男人的天堂影院| 久久亚洲精品人成综合网| 午夜一区二区三区视频| 91老司机在线| 亚洲第一网站在线观看| 欧美韩日精品| 精品人伦一区二区三区蜜桃免费| 亚洲国产高清国产精品| 午夜在线视频观看| 国产精品99久久久久久久女警| 国产成人精彩在线视频九色| 久久久精品国产sm调教网站| 久久一区二区三区喷水| 亚洲欧洲国产伦综合| 日本一级大毛片a一| 中文字幕中文字幕在线十八区 | 给我看免费高清在线观看| 95精品视频| 亚洲欧美日韩在线播放| 色姑娘综合av| 国产人成在线观看| 久久久久久97三级| 久久人人九九| 色视频在线观看| 99久久久免费精品国产一区二区| 99国精产品一二二线| 国产精品色综合| 精品一区二区三区在线观看国产 | 日本一区影院| 亚洲黄色片在线观看| 亚洲一区二区三区精品在线观看 | 久久久久久9999| 欧美高清视频一区| 精品视频一二区| 国产亚洲精久久久久久| 久草精品电影| 黄色a在线观看| 成人毛片老司机大片| 国产精品久久久久久久久久久久冷| 国产福利免费视频| 国产精品一品二品| av资源站久久亚洲| 日本xxxx人| 91丝袜美腿高跟国产极品老师| 国产精品对白刺激| 狠狠狠狠狠狠狠| 玖玖视频精品| 国产精品日韩欧美综合| 亚洲视频在线免费播放| 精品人妻无码一区二区三区蜜桃一| 狠狠一区二区三区| 亚洲第一页在线| 第四色在线视频| 蜜桃国内精品久久久久软件9| 亚洲全黄一级网站| 大胸美女被爆操| 66视频精品| 欧美精品激情在线| 老熟妇仑乱一区二区av| 蜜臀va亚洲va欧美va天堂| 国产欧美在线视频| 午夜精品在线播放| 久久免费视频一区| 国产剧情日韩欧美| 国产精品久久久久久久久毛片| 精品一二三四在线| 国产精品久久一区二区三区| 欧洲亚洲在线| 国产精品久久久久三级| 日韩视频 中文字幕| 深夜在线视频| 欧美精选一区二区| 久久久老熟女一区二区三区91| 国产欧美一区二区精品久久久| 制服丝袜在线91| 日韩精品国产一区| 国产成人av| 欧美成人在线影院| 6080午夜伦理| 国内成人精品2018免费看| 国产视频一区二区三区四区| av在线播放网站| 亚洲韩国精品一区| 天天色综合社区| 精品人人人人| 久久精品国产久精国产思思| 国产高清中文字幕| 韩国三级电影一区二区| 欧美极品一区二区| a毛片在线观看| 色就色 综合激情| 国产成人av片| 色呦哟—国产精品| 日本精品久久中文字幕佐佐木| 国产精品久久久久毛片| 国产午夜精品福利| 精品无码国产一区二区三区av| 暖暖日本在线观看| 色综合久久66| 国产真实乱子伦| 精品伊人久久| 最近2019中文字幕第三页视频| 国产成人在线观看网站| 国产麻豆一精品一av一免费| 日本精品一区二区三区不卡无字幕| 黄页在线观看免费| 欧美久久一区二区| 男人的天堂av网| 国产午夜精品一区二区三区欧美 | 91激情视频在线观看| 精品99视频| 不卡一区二区三区视频| 国产91在线视频蝌蚪| 欧美日韩中文字幕一区二区| 亚洲第一成人网站| 99在线|亚洲一区二区| 91久久爱成人| 久久精品视频观看| 欧美夫妻性生活| 久草福利资源在线| 欧美aaaaaa午夜精品| 天堂一区二区三区 | 在线观看视频日韩| 国产精品毛片va一区二区三区| 怡红院在线播放| 欧美一级xxx| 中文字幕av免费在线观看| 国产在线看一区| 老汉色影院首页| 国产精品视频一区视频二区| 久久天天躁狠狠躁老女人| 91国在线视频| 成人av婷婷| 国产精品久久久久久久久动漫| 超碰网在线观看| 国语产色综合| 国产精品一区二区久久| 日本a在线播放| 欧美区在线观看| 天堂va欧美va亚洲va老司机| 亚洲中无吗在线| 97人人干人人| 免费成人在线电影| 亚洲欧洲午夜一线一品| 日韩乱码一区二区三区| 国产精品久久久久久福利一牛影视| 爱爱爱爱免费视频| 一个色综合网| 国产精品一区二区三区观看| 欧美xxxhd| 在线播放国产一区中文字幕剧情欧美| 色婷婷久久综合中文久久蜜桃av| 国产精品对白交换视频| 初高中福利视频网站| 亚洲啪啪91| 日韩在线导航| 精品视频一区二区三区在线观看| 欧美精品18videosex性欧美| 亚洲三区在线观看无套内射| 在线视频国内自拍亚洲视频| 五月天色婷婷丁香| 成人性视频免费网站| 熟女少妇在线视频播放| 欧美综合久久| 成人午夜影院在线观看| 日韩精选视频| 久久国产精品偷| 三级做a全过程在线观看| 欧美日韩一区二区在线观看| 久久国产精品波多野结衣| 久久久亚洲午夜电影| 国产三级精品三级在线| 夜夜嗨一区二区| 中文字幕黄色大片| 西瓜成人精品人成网站| 亚洲aⅴ男人的天堂在线观看| 国产乱码精品一区二三赶尸艳谈| 深夜福利日韩在线看| 成人免费公开视频| 欧美日韩精品一区二区天天拍小说 | 久草综合在线观看| 欧美日韩专区| 视频一区亚洲| 免费福利视频一区| 92福利视频午夜1000合集在线观看| 欧产日产国产精品视频| 久久成人在线视频| 国产在线黄色| 精品国产乱码久久久久久蜜臀| 伊人网av在线| 欧美日韩一区二区三区| 欧美黄色免费看| 国产精品三级久久久久三级| 免费的av网站| 国产成人8x视频一区二区| 欧美特级aaa| 亚欧成人精品| 131美女爱做视频| 97人人澡人人爽91综合色| 国产精品免费一区豆花| 麻豆蜜桃在线观看| 欧美激情aaaa| 国产精品久久麻豆| 国产亚洲欧美另类中文| 无码人妻丰满熟妇精品区| 亚洲一区二区在线播放相泽 | 一区二区激情视频| 97精品在线播放| 国产日韩欧美精品电影三级在线| 亚洲精品女人久久久| 国产成人在线影院| 天堂在线中文在线| 精品在线视频一区| av污在线观看| 青青青爽久久午夜综合久久午夜| 男人日女人视频网站| 激情综合视频| 免费视频爱爱太爽了| 欧美人成在线| 精品免费久久久久久久| 午夜精彩国产免费不卡不顿大片| 亚洲一一在线| 91精品亚洲| 一区精品在线| 亚洲精品成人| 久久久久久久久网| 欧美激情四色| 男人添女荫道口女人有什么感觉| 国产精品videosex极品| 高清无码视频直接看| 国产主播精品| 777av视频| 免费在线观看成人av| 免费国产成人av| 免费观看日韩电影| 五月激情五月婷婷| 国产精品资源站在线| 国产吃瓜黑料一区二区| 成人免费毛片aaaaa**| 欧美在线一级片| 久久久精品欧美丰满| 国产人妻大战黑人20p| 7m精品国产导航在线| 日韩电影中文字幕av| 日色在线视频| 中文字幕日韩精品有码视频| 国产理论在线观看| 久久久久久久久久久久av| 天堂av中文在线观看| 国产精品福利网站| 国产精品麻豆| 国产欧美韩日| 国产欧美日韩| 日韩视频 中文字幕| 亚洲免费综合| 免费av不卡在线| 成人av午夜影院| 亚洲综合欧美综合| 亚洲精品成人a在线观看| 国产亚洲精品av| 在线观看av一区| www.欧美国产| 国产午夜精品一区理论片飘花| 日本成人在线播放| 91国产精品电影| 日韩成人综合网| 精品伦精品一区二区三区视频| 国产成人精品三级高清久久91| 一区二区三区视频| 一区二区三区国产盗摄| 中文字幕中文在线| 91香蕉国产在线观看软件| www.毛片com| 一本色道a无线码一区v| 国产欧美日韩成人| 日韩av综合中文字幕| 欧美极品视频| 欧美亚洲国产视频| 国产精品蜜月aⅴ在线| 国产一区免费观看| 精品免费av| 欧美日本视频在线观看| 国产麻豆成人精品| av男人的天堂av| 午夜视频久久久久久| 在线观看国产小视频| 亚洲电影天堂av| 思思99re6国产在线播放| 欧美中文字幕在线观看| 性欧美video高清bbw| 欧美自拍大量在线观看| 日韩欧美久久| 一区二区精品在线| 久久久久欧美精品| 亚洲观看黄色网| 亚洲精品国产视频| 国产又粗又猛又黄| 亚洲欧美一区二区精品久久久| 四虎影视国产在线视频| 国产日韩在线观看av| 久久99视频| 日本欧美黄色片| 国产成人aaa| 草视频在线观看| 91精品久久久久久蜜臀| 成人免费在线电影| 日韩美女视频中文字幕| 另类春色校园亚洲| 97超碰国产精品| 国产美女视频91| 免费在线黄色网| 欧美精品 国产精品| 在线免费观看黄| 国产精品极品美女在线观看免费| 亚洲ab电影| 欧美日韩在线视频一区二区三区| av色综合久久天堂av综合| 九九视频在线观看| 欧美成人精品高清在线播放| 中文字幕免费高清电视剧网站在线观看| 国产精品一二三在线| 欧美裸体在线版观看完整版| 国产一级片黄色| 国产日韩精品视频一区| 国产一卡二卡三卡| 中文字幕国产精品久久| 成人国产一区| 亚洲在线不卡| 精品一区二区日韩| 亚洲精品卡一卡二| 日韩你懂的在线播放| 在线观看h网| 国产精品一区二区三区免费| 黑丝一区二区三区| 污污内射在线观看一区二区少妇| 午夜电影久久久| 深夜福利在线视频| 国产成人综合亚洲| 日本久久精品| 992tv人人草| 亚洲一区在线播放| 四虎精品在线| 国产精品福利观看| 91精品国产自产在线观看永久∴| 久久久精品视频国产| 亚洲国产日韩综合久久精品| 网站黄在线观看| 国产成人福利视频| 91精品久久久久久久久久不卡| 1314成人网| 黄色成人av网| 99青草视频在线播放视| 亚洲淫片在线视频| 99精品国产在热久久| 国产精品成人无码免费| 91精品国产日韩91久久久久久| 岛国毛片av在线| 欧美在线视频一区二区三区| 精品一区二区三区免费视频| 国产在线拍揄自揄拍| 亚洲人成毛片在线播放| 日韩有码欧美| koreanbj精品视频一区| 国产精品美日韩| 国产91久久久| 国产精品永久在线| 亚洲大胆在线| 日本女人性生活视频| 亚洲丁香婷深爱综合| 久久69成人| 激情伊人五月天| 18欧美亚洲精品| 水莓100国产免费av在线播放| 成人免费在线网址| 亚洲欧美视频| 久久国产在线观看| 在线视频日本亚洲性| 国产精品视屏| 在线观看免费不卡av| 欧美性猛交丰臀xxxxx网站| 黄色网页在线免费观看| 欧美性天天影院|