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

初識(shí)Redis,看這一篇就夠了

存儲(chǔ) 數(shù)據(jù)管理 Redis
Redis (全稱: Remote Dictionary Server 遠(yuǎn)程字典服務(wù))是一個(gè)開源的使用 ANSI C語言 編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、 Key-Value數(shù)據(jù)庫 。

 [[315376]]

環(huán)境的搭建和安裝網(wǎng)上有很多教程,在這里就不再重復(fù)了。

1. Redis 是什么?

Redis (全稱: Remote Dictionary Server 遠(yuǎn)程字典服務(wù))是一個(gè)開源的使用 ANSI C語言 編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、 Key-Value數(shù)據(jù)庫 。

大家可能知道 Redis 是做緩存用的,它實(shí)際上也是一種數(shù)據(jù)庫,可以對(duì)經(jīng)常使用到的數(shù)據(jù)進(jìn)行存儲(chǔ),也就是大家所說的緩存。

官方給出的數(shù)據(jù)是, Redis 能達(dá)到 10w+ 的 QPS( 每秒查詢速度 ) 。

為什么 Redis 的速度比 Mysql 等這種數(shù)據(jù)快呢?

因?yàn)?Redis 存儲(chǔ)的是 key-values 格式的數(shù)據(jù),時(shí)間復(fù)雜度是 O(1) ,即直接通過 key 查詢對(duì)應(yīng)的 value 。 而如 Mysql 數(shù)據(jù)庫,底層的實(shí)現(xiàn)是 B+ 樹,時(shí)間復(fù)雜度是 O(logn) 。

最重要的一點(diǎn)是,數(shù)據(jù)庫的數(shù)據(jù)是存儲(chǔ)在磁盤中的,而 Redis 是存儲(chǔ)在內(nèi)存當(dāng)中的,它們的速度差距不言而喻。但 Redis 也支持持久化存儲(chǔ),這個(gè)后面的常見問題里會(huì)提到。

2. Redis 數(shù)據(jù)類型

Redis 支持 5 種數(shù)據(jù)類型: string (字符串)、 hash (哈希)、 list (列表,有序可重復(fù))、 set (集合,無序不可重復(fù))、 zset (有序集合,有序不可重復(fù))。

Redis 中所有數(shù)據(jù)都是字符串, key 是區(qū)分大小寫的。

  • string 是最基本的類型,可以包含任何數(shù)據(jù),但是 string 類型的值最大能存儲(chǔ) 512MB 。
  • hash 的 value 相當(dāng)于一個(gè) map , value 里面也有對(duì)應(yīng)的 key-value ,特別適合存儲(chǔ)對(duì)象。一個(gè) hash 可以存儲(chǔ) 2^32-1 個(gè)鍵值對(duì),基本用不完。并且可以修改某一個(gè)屬性值,所以一般用于存儲(chǔ)用戶或其他實(shí)體類的值。
  • list 中的 value 按照插入順序排序,可以在列表的頭部和尾部添加新元素。一般用于最新消息的排行或消息隊(duì)列。
  • set 存放的是不重復(fù)值的集合,是無序的。并提供了求交集、并集、差集等操作,所以一般用于統(tǒng)計(jì)等功能。
  • 與 set 不同的是, zset 是通過分?jǐn)?shù)( score )從小到大進(jìn)行排序的,我們可以指定每個(gè)值的分?jǐn)?shù),分?jǐn)?shù)可以重復(fù)。一般用于排行等功能。

3.Redis常用命令

基于對(duì)上面 5 種數(shù)據(jù)類型的了解,接著學(xué)習(xí)一下 Redis 常用命令。更多了命令學(xué)習(xí),推薦大家看一看官方文檔 http://www.redis.cn/commands.html

(1)對(duì)stirng的操作

redis命令不區(qū)分大小寫。

下面命令中,str就是key,hello就是value,append為追加命令,如果原來沒有str,就新建一個(gè)。

append str hello    //對(duì)key為str的鍵追加hello字符串a(chǎn)ppend str redis  //str的value變?yōu)閔elloredisset str1 1   //set命令設(shè)置一個(gè)key的value值 str1是key,1是valueget str1   //get命令,獲取一個(gè)key的值 incr str1  //incr命令,執(zhí)行加1操作,比如str1的值會(huì)變成2,如果指定的key的value不能表示一個(gè)整數(shù),就會(huì)返回一個(gè)錯(cuò)誤decr str1  //減一操作

(2)對(duì)hash的操作

上面說到過,hash的value相當(dāng)于一個(gè)map,所以只設(shè)置值的時(shí)候myhash是key,h1是value里面的key,hello是h1的value

hset myhash h1 hello  //設(shè)置一個(gè)key的value值hget myhash h1  //返回hello,myhash為key,h1是value里面的key,兩個(gè)都需要指定hlen myhash  //獲取myhash的字段數(shù)量,這里返回1hkeys myhash  //獲取myhash所以字段,這里返回h1

(3)對(duì)list的操作

mylst是key,a,b,c,d都是value,并且有順序,所以實(shí)際存進(jìn)去后是d,c,b,a

lpush mylist a b c d  //lpush,從隊(duì)列左邊入隊(duì)一個(gè)或多個(gè)元素lrange mylist 0 -1  //獲取指定范圍的值,從0開始,-1代表全部,注意這里返回d,c,b,a。rpush mylist 1 2 3  //從右邊入隊(duì),再次lrange的話就是d,c,b,a,1,2,3lpop mylist  //從左邊彈出一個(gè)元素,這里彈出d,此時(shí)的mylist就沒有d了

(4)對(duì)set的操作

如果我們添加了重復(fù)的元素,不會(huì)報(bào)錯(cuò),但只會(huì)存一個(gè)。如a b b,只會(huì)存a b

兩個(gè)集合之間不受影響,即key為myset和myset2兩個(gè)集合里面都可以有a b

sadd myset a b c d  //添加一個(gè)或多個(gè)元素到集合里面smembers myset  //獲取集合里所有元素,輸出是無序的,隨機(jī)的。這里可能是b,d,c,asrem myset a c  //移除myset中的a和c元素,由于不可能重復(fù)也沒順序,所以可以直接指定元素值來移除

(5)對(duì)zset的操作

myzset為key,a b c前面的數(shù)字就是score

zadd myzset 2 b 1 a 3 c  //添加一個(gè)或多個(gè)元素zrange myzset 0 -1  //獲取指定范圍的值,0開始,-1代表全部。這里返回a,b,c

更多的命令可以看上面網(wǎng)站中的文檔,寫的非常詳細(xì),下面的常見問題中也會(huì)提及一些。

4.Redis常見問題

 

(1)在大量的key中查詢某一固定前綴的key

在實(shí)際的業(yè)務(wù)當(dāng)中,key的命名是有規(guī)范的,比如緩存用戶信息,key的前綴可能會(huì)是user。

現(xiàn)在有幾千萬條數(shù)據(jù),查詢user為前綴的key的話,第一下想到的可能會(huì)是keys命令

keys user*  //user*為正則表達(dá)式

其時(shí)間復(fù)雜度為O(n),雖然性能也算可以,但是在查詢幾千萬條數(shù)據(jù)時(shí)明顯太慢了,花上幾分鐘都不稀奇,而且在查詢出來之前,可能會(huì)造成服務(wù)卡頓,占用大量?jī)?nèi)存,顯然是不可取的。

那么這種情況就可以使用scan命令

下面的命令中,math count為可選項(xiàng),可用可不用,所以需要顯示的寫出來。math意味后面會(huì)匹配一個(gè)正則表達(dá)式。count代表一次查詢10條。

這個(gè)10條不是強(qiáng)制的,可能會(huì)比10條少。

scan 0 math user*  count 10  //從0開始,查詢user為前綴的key,一次查詢10條并返回

執(zhí)行上面一句話后,會(huì)返回兩個(gè)東西,一個(gè)游標(biāo),代表執(zhí)行到哪了,比如執(zhí)行到了14325。返回的另一個(gè)就是user為前綴的key了。

下次再執(zhí)行這條語句時(shí),把0換成14325,接著上次的位置繼續(xù)查詢。但是游標(biāo)不一定是遞增的,也許下次的游標(biāo)比這次還小,所以存在重復(fù)的隱患。

我們可以在業(yè)務(wù)代碼處循環(huán)查詢,記錄每次返回的游標(biāo),并把查詢的key存入到set當(dāng)中,起到去重的效果。

scan,實(shí)際上就是分批查詢,速度顯然沒有keys快,在查詢大量數(shù)據(jù)時(shí),不會(huì)對(duì)服務(wù)器造成壓力。數(shù)據(jù)量不大時(shí)依舊推薦keys。

(2)利用Redis實(shí)現(xiàn)分布式鎖

首先了解什么是分布式鎖。即控制分布式系統(tǒng)訪問共享資源的一種方式。

比如系統(tǒng)(或主機(jī))A和B都需要訪問資源DataA時(shí),當(dāng)A先訪問到了DataA,這時(shí)候就需要分布式鎖來把B擋住,防止A和B彼此干擾,保證數(shù)據(jù)的一致性。

額外提一點(diǎn)就是,Redis命令的操作是原子性的,原子性在數(shù)據(jù)庫的事務(wù)中有體現(xiàn),Redis的命令也是原子性的,要么執(zhí)行要么不執(zhí)行,不會(huì)出現(xiàn)一個(gè)命令執(zhí)行到一半失敗了,但還是改變了數(shù)據(jù)的問題。

實(shí)現(xiàn)分布式鎖,需要解決一下幾個(gè)問題:

1.互斥性,即任意時(shí)刻只能有一個(gè)客戶端獲取鎖。

2.安全性,鎖只能有持有它的客戶端刪除,不能由其他客戶端刪除。

3.死鎖,即由于某些原因,一些客戶端出現(xiàn)問題不能及時(shí)釋放鎖,導(dǎo)致其他客戶端也不能獲取鎖。

4.容錯(cuò),當(dāng)某些Redis節(jié)點(diǎn)出現(xiàn)問題時(shí),客戶端也要能獲取到鎖。

我們可以用setnx實(shí)現(xiàn)鎖的功能。語法:setnx key value

僅當(dāng)key不存在時(shí),才會(huì)設(shè)置成功。成功返回1,否則返回0。

1.在對(duì)應(yīng)的訪問資源的業(yè)務(wù)代碼處,對(duì)指定的key設(shè)值,如果成功了,則代表沒有其他線程執(zhí)行過這段代碼,也就是沒有其他線程訪問這個(gè)資源。

如果設(shè)值失敗,就代表有其他線程占用該資源,就一直等待,直到setnx成功。

2.還有個(gè)問題就是,這個(gè)key是長(zhǎng)期有效的,所以還需要用到expire命令,語法:expire key seconds,seconds單位為秒,用以設(shè)置對(duì)應(yīng)key的過期時(shí)間。

上面兩步似乎好像是實(shí)現(xiàn)了鎖的功能,但是缺陷也非常明顯,如果成功設(shè)值后,在我設(shè)置時(shí)間之前客戶端就出現(xiàn)問題了怎么辦? 用兩個(gè)命令實(shí)現(xiàn)一個(gè)功能有悖于Redis的原子性 。

在Redis2.6.12版本開始,set有兩個(gè)參數(shù),就是實(shí)現(xiàn)了以上兩個(gè)功能。雖然上面兩步分開的做法是錯(cuò)的,但是思路是一樣的。

具體語法: set key value ex 10 nx 。ex代表過期時(shí)間,這里設(shè)置10秒過期,nx代表key是要唯一的,即一個(gè)命令實(shí)現(xiàn)了以上兩個(gè)步驟。

最后還有一個(gè)小問題,如果不同資源同時(shí)設(shè)置了鎖key,過期時(shí)間也是一樣的,到期后Redis同時(shí)刪除大量key時(shí),難免會(huì)出現(xiàn)卡頓。

解決方法就是在設(shè)置過期值時(shí)加上隨機(jī)值。

3.利用Redis實(shí)現(xiàn)消息隊(duì)列

消息隊(duì)列,簡(jiǎn)稱MQ,即消息和隊(duì)列兩個(gè)單詞的首字母縮寫。常見的消息隊(duì)列有RabbitMQ和RocketMQ等,利用Redis實(shí)現(xiàn)消息隊(duì)列只是熟悉下其特點(diǎn),實(shí)際當(dāng)中一般會(huì)使用專門的消息隊(duì)列中間件。

如果之前沒了解過消息隊(duì)列,建議搜索一下消息隊(duì)列相關(guān)知識(shí)進(jìn)行一下簡(jiǎn)單的學(xué)習(xí)。

簡(jiǎn)單地說,消息隊(duì)列的作用就是接受客戶端的請(qǐng)求,然后對(duì)這些請(qǐng)求依次處理,一般應(yīng)用請(qǐng)求量特別大時(shí),比如秒殺搶購等。上面介紹數(shù)據(jù)類型時(shí)就說到了list一般用于消息隊(duì)列。

看一下list的常見操作,雖然叫做列表,但其特點(diǎn)和數(shù)據(jù)結(jié)構(gòu)的隊(duì)列基本一模一樣。所以在用Redis實(shí)現(xiàn)消息隊(duì)列時(shí),首先肯定會(huì)想到list。

1.利用list的話,仿佛 使用rpush生產(chǎn)消息,lpop消費(fèi)消息 就行了。但是有一個(gè)小問題,lpop不會(huì)等待rpush的,當(dāng)rpush還沒來得及生成數(shù)據(jù)時(shí),這時(shí)lpop會(huì)直接返回null的。

2.既然要等待rpush生成數(shù)據(jù),難免又會(huì)想到一個(gè)命令blpop,其語法為:blpop key seconds。 和lpop功能一樣,但是會(huì)等待指定的時(shí)間,這段時(shí)間內(nèi)rpush如果生成數(shù)據(jù)的話,blpop會(huì)及時(shí)返回。

3. 但是blpop的缺點(diǎn)也很明顯,當(dāng)然這個(gè)缺點(diǎn)也存在于lpop當(dāng)中,就是blpop執(zhí)行完后,代表出隊(duì),rpush生成的這條消息就沒了,而消息隊(duì)列中有的需求是需要多個(gè)消費(fèi)者去接收的。

這時(shí)候就可以用上 Redis的訂閱者模式 ,Redis客戶端可以訂閱任意數(shù)量的頻道(Topic)

初識(shí)Redis,看這一篇就夠了

 

在Redis當(dāng)中用subscribe命令訂閱一個(gè)頻道,語法subscribe topic,topic就是自定義的頻道名稱,注意是topic不是key, 不需要事先定義,直接訂閱就行了。

然后用publish生產(chǎn)消息,語法publish topic value,topic就是你想發(fā)布到哪個(gè)頻道,value就是數(shù)據(jù)內(nèi)容,而訂閱了這個(gè)頻道的所有消費(fèi)者都會(huì)接收到消息。 注意是及時(shí)收到,不需要你再去手動(dòng)用命令獲取。

訂閱者模式,的確解決了以上兩種方法的缺點(diǎn),但是其缺陷也很明顯,就是只有處于訂閱者模式,也就是監(jiān)聽狀態(tài)下,消費(fèi)者才會(huì)接受到生產(chǎn)者的消息,也就是及時(shí)發(fā)送及時(shí)接收的,一旦Redis客戶端下線,就永遠(yuǎn)不會(huì)接收到這個(gè)消息了。

這就回到了前面說到的一句話,實(shí)際當(dāng)中會(huì)使用專門的消息隊(duì)列中間件來說實(shí)現(xiàn)這些功能,以上三種方法或多或少可以實(shí)現(xiàn)消息隊(duì)列的功能,但是缺陷也非常明顯。

4.Redis如何做持久化

Redis是基于內(nèi)存當(dāng)中的,那么肯定就會(huì)有疑問了,當(dāng)我關(guān)閉主機(jī)或者關(guān)閉了Redis,那Redis的數(shù)據(jù)是不是就全沒了。

持久化的作用就是,把Redis的數(shù)據(jù)存儲(chǔ)到磁盤當(dāng)中,以免Redis的數(shù)據(jù)丟失。

Redis有兩種持久化機(jī)制,默認(rèn)的一種是RDB,另一種是AOF。

1.RDB(快照)持久化會(huì)在某個(gè)時(shí)間點(diǎn)保存全量的數(shù)據(jù),快照即針對(duì)內(nèi)存進(jìn)行的快速讀取技術(shù)。而這個(gè)時(shí)間點(diǎn)可以由我們的實(shí)際業(yè)務(wù)進(jìn)行時(shí)間策略配置。

RDB會(huì)按照時(shí)間周期策略對(duì)數(shù)據(jù)以快照的方式保存到磁盤里,并產(chǎn)生一個(gè) dump.rdb的二進(jìn)制文件 。我們可以在redis.conf配置文件中save參數(shù)查看和配置時(shí)間策略。

dump.rdb文件是如何創(chuàng)建的呢? rdb文件可以通過兩個(gè)命令創(chuàng)建 ,一個(gè)是save,一個(gè)是bgsave。 要注意這里的save是redis命令,上面提到的save是配置文件里面的參數(shù)。

save命令會(huì)阻塞Redis服務(wù)器進(jìn)程,直到rdb文件創(chuàng)建完成,一般很少使用。

bgsave命令會(huì)fork出一個(gè)子進(jìn)程來創(chuàng)建rdb文件,不會(huì)阻塞服務(wù)器進(jìn)程。fork即創(chuàng)建一個(gè)與父進(jìn)程幾乎一樣的子進(jìn)程。

bgsave的基本原理:當(dāng)我們使用bgsave命令時(shí),首先會(huì)檢查是否存在RDB/AOF子進(jìn)程正在進(jìn)行,有的話就返回錯(cuò)誤,即當(dāng)我們第一次執(zhí)行了bgsave,在執(zhí)行完之前其他的bgsave會(huì)被拒絕執(zhí)行。

如果沒有正在進(jìn)行的子進(jìn)程,就會(huì)調(diào)用redis源碼里面的rdbSaveBackground這個(gè)方法,然后利用fork創(chuàng)建一個(gè)子進(jìn)程。

RDB的缺點(diǎn):

1.1.前面提到,在某個(gè)時(shí)間點(diǎn)會(huì)進(jìn)行全量數(shù)據(jù)保存,數(shù)據(jù)量大的話由于I/O而嚴(yán)重影響到性能。

1.2.由于RDB是根據(jù)配置文件里面的時(shí)間策略進(jìn)行保存的,如果發(fā)生意外情況,那么上次保存到當(dāng)前時(shí)間段內(nèi)的數(shù)據(jù)會(huì)發(fā)生丟失。

2.AOF(Append-Only-File)持久化 會(huì)以追加的方式(append)保存除了查詢指令以外所有變更的數(shù)據(jù),其默認(rèn)的文件名稱為 appendonly.aof 。

AOF持久化默認(rèn)是關(guān)閉的,我們可以 在配置文件當(dāng)中找到appendonly參數(shù),把它的參數(shù)內(nèi)容改為yes。

前面說到AOF文件會(huì)記錄所有非查詢的所有指令,最后肯定難以避免文件不斷增大的問題,最主要的問題是記錄的很多數(shù)據(jù)是不必要的。

比如循環(huán)更新一個(gè)數(shù)100次,AOF會(huì)記錄這100個(gè)過程,而我們只需要最終結(jié)果就行了。

所以, Redis提供了一個(gè)日志重寫的功能解決文件不斷增大的問題 ,可以用BGREWRITEAOF命令手動(dòng)執(zhí)行。日志重寫在服務(wù)不中斷的情況下也能執(zhí)行, 其基本原理如下 

1.使用fork創(chuàng)建一個(gè)子進(jìn)程。2.子進(jìn)程把新的AOF寫道一個(gè)臨時(shí)文件里,并不會(huì)依賴現(xiàn)有的AOF文件,只需要讀取內(nèi)存中的數(shù)據(jù)。這里就優(yōu)化了很多不必要的數(shù)據(jù)。

3.主進(jìn)程這時(shí)候會(huì)依舊將新的變動(dòng)寫到內(nèi)存里,也會(huì)寫到現(xiàn)有的AOF文件里,即使子進(jìn)程重寫失敗,數(shù)據(jù)也不會(huì)丟失。4.主進(jìn)程獲取到子進(jìn)程AOF重寫完成的信號(hào)后,會(huì)把新的變動(dòng)追加到新的AOF文件里。

5.最后使用新的AOF文件替換掉原來的AOF文件。

如果啟用了AOF持久化,Redis啟動(dòng)時(shí)會(huì)先檢查AOF文件是否存在,如果存在就直接加載AOF文件,如果不存在就檢查RDB文件是否存在,如果存在就加載,不存在就直接啟動(dòng)Redis。

在Redis4.0之后,推出了RDB-AOF混合持久化方式并作為默認(rèn)方式,RDB全量保存,AOF增量保存,集成了它們各自的優(yōu)點(diǎn)。

5.SpringBoot整合Redis

首先在依賴項(xiàng)里面添加redis啟動(dòng)器

spring-boot-starter-data-redis

然后在配置文件里面進(jìn)行相關(guān)的配置,更多的配置可以看RedisProperties.java源碼查看。

spring.redis.host=127.0.0.1    #redis地址spring.redis.port=6379    #redis服務(wù)端口號(hào)

最后注入相關(guān)的類

//操作的是復(fù)雜類型,比如各種實(shí)體類@AutowiredRedisTemplate redisTemplate//操作的是字符串@AutowiredStringRedisTemplate stringRedisTemplate

SpringBoot框架下對(duì)Redis的操作不像Jedis那樣可以直接使用原生的Redis命令,具體的API大家可以自行搜索相關(guān)的文檔。

不過推薦使用一些SpringBoot的Redis工具類,工具類會(huì)對(duì) RedisTemplate和StringRedisTemplate的方法進(jìn)行封裝,而封裝后的方法名和Redis原生命令是一樣的。

 

在這里分享一篇Redis實(shí)戰(zhàn)電子篇給大家,感興趣的朋友轉(zhuǎn)發(fā)+私信Redis即可獲取

初識(shí)Redis,看這一篇就夠了

 

 

初識(shí)Redis,看這一篇就夠了

 

 

初識(shí)Redis,看這一篇就夠了

 

 

 

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

2023-02-10 09:04:27

2022-06-20 09:01:23

Git插件項(xiàng)目

2021-04-08 07:37:39

隊(duì)列數(shù)據(jù)結(jié)構(gòu)算法

2022-08-01 11:33:09

用戶分析標(biāo)簽策略

2023-09-11 08:13:03

分布式跟蹤工具

2019-04-10 10:43:15

Redis內(nèi)存淘汰策略

2019-05-14 09:31:16

架構(gòu)整潔軟件編程范式

2024-09-23 08:00:00

消息隊(duì)列MQ分布式系統(tǒng)

2023-10-17 08:15:28

API前后端分離

2020-07-03 08:21:57

Java集合框架

2018-05-22 08:24:50

PythonPyMongoMongoDB

2025-08-07 04:10:00

光模塊AI網(wǎng)絡(luò)

2022-04-07 10:39:21

反射Java安全

2017-03-11 22:19:09

深度學(xué)習(xí)

2023-11-18 09:30:42

模型AI

2020-10-18 07:32:06

SD-WAN網(wǎng)絡(luò)傳統(tǒng)廣域網(wǎng)

2022-07-06 12:07:06

Python函數(shù)式編程

2020-10-21 14:12:02

Single Sign

2022-05-19 08:28:19

索引數(shù)據(jù)庫

2019-04-01 10:43:59

Linux問題故障
點(diǎn)贊
收藏

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

亚洲欧洲日韩精品在线| 免费毛片在线| 欧美一区免费| 亚洲国产精品成人av| 那种视频在线观看| 三区四区在线视频| 成人在线视频一区| 国产成人精品电影久久久| 污软件在线观看| 免费成人三级| 制服丝袜av成人在线看| 精品这里只有精品| 91九色在线porn| 北条麻妃一区二区三区| 国产成+人+综合+亚洲欧洲 | 91免费视频网址| 国产精品伦子伦免费视频| 波多野结衣亚洲一区二区| 清纯唯美亚洲经典中文字幕| 欧美久久高跟鞋激| 欧美韩国日本在线| 97caopor国产在线视频| 久久精品这里都是精品| 91视频最新| 中文字幕第三页| 激情久久中文字幕| www.国产一区| 中文字幕免费高清| 91精品久久久久久综合五月天| 欧美日韩一区 二区 三区 久久精品| 欧美一级免费播放| 黄色一级片在线观看| 久久久久久久久蜜桃| 国产美女精品在线观看| 国产精品视频久久久久久| 亚洲自拍另类| 性色av一区二区三区| 久久国产波多野结衣| 精品国产一区二区三区噜噜噜| 亚洲国产欧美一区二区三区同亚洲 | 成人亚洲性情网站www在线观看| jlzzjlzz亚洲日本少妇| http;//www.99re视频| 91成年人视频| 日韩不卡在线观看日韩不卡视频| 午夜精品一区二区三区在线视| 欧美黄色免费看| 亚洲字幕久久| 日韩视频第一页| 四虎884aa成人精品| 精品久久美女| 亚洲性生活视频在线观看| 最新中文字幕视频| 婷婷综合福利| 亚洲男人的天堂网站| 亚洲最大免费视频| 红杏视频成人| 亚洲精品大尺度| www.啪啪.com| 成人h动漫精品一区二区器材| 欧美一二三区精品| 色综合久久久无码中文字幕波多| 国产精品白丝久久av网站| 在线播放91灌醉迷j高跟美女| 欧洲在线免费视频| 亚洲伊人影院| 日韩av最新在线| 香蕉视频黄色在线观看| 久久综合色占| 色诱女教师一区二区三区| 国产日产精品一区二区三区的介绍| 91视频一区| 欧美成人免费小视频| 国产在线视频99| 夜久久久久久| 国产精品嫩草视频| 国产哺乳奶水91在线播放| 成人美女在线观看| 欧美视频观看一区| 欧美性天天影视| 一区二区三区久久| 国产乱子伦农村叉叉叉| 电影一区二区| 日韩一区二区三区在线| 日本少妇毛茸茸| 精品国产aⅴ| 久久久久北条麻妃免费看| 久草视频在线资源| 久久国产精品久久w女人spa| 国产精品美女免费| 性一交一乱一精一晶| 久久久www成人免费毛片麻豆| 亚洲精品一区二区三区四区五区| 午夜视频在线观看免费视频| 亚洲一卡二卡三卡四卡无卡久久| 欧美性大战久久久久xxx| 欧美亚洲综合视频| 日韩大陆欧美高清视频区| 制服 丝袜 综合 日韩 欧美| 一区二区三区四区电影| 97在线观看免费| 国产精品自拍电影| wwwwww.欧美系列| 国产91av视频在线观看| 乱人伦视频在线| 制服丝袜亚洲播放| 亚欧洲乱码视频| 欧美日韩国产高清| 国产精品久久久久免费a∨| 黄色一级大片在线免费看国产一| 国产欧美日韩在线看| 成人黄色大片网站| 日韩成人在线一区| 亚洲欧美色婷婷| 激情小说中文字幕| 久久精品国内一区二区三区| 久久久精品动漫| 婷婷av在线| 欧美日韩激情一区二区三区| 粉嫩av懂色av蜜臀av分享| 国产精品久久久久久影院8一贰佰| 91高清视频免费| 午夜精品久久久久久久爽 | 国产一区二区日韩精品| 日本精品免费| 澳门成人av网| 亚洲国产成人av在线| 男女做暖暖视频| 人妖欧美一区二区| 美女一区视频| 岛国av在线播放| 日韩精品一区二区三区在线| 岛国片在线免费观看| 老鸭窝91久久精品色噜噜导演| 国产精品麻豆免费版| 成人短视频在线观看| 欧美日韩一区二区电影| 国产免费无遮挡吸奶头视频| 国产精品久久久久久久免费软件| 成人黄色片视频网站| 国产成人在线视频免费观看| 欧美精品丝袜久久久中文字幕| 久久视频精品在线观看| 乱码第一页成人| 美媛馆国产精品一区二区| 超碰资源在线| 亚洲精品成人久久| 91视频免费网址| 久久这里只有精品首页| 久久国产成人精品国产成人亚洲| 久久久久观看| 66m—66摸成人免费视频| 日本高清视频免费观看| 天天爽夜夜爽夜夜爽精品视频| 亚洲视频天天射| 雨宫琴音一区二区在线| 国产一区二区三区黄| 神马午夜在线视频| 亚洲男人的天堂网站| 午夜一级黄色片| 中文字幕亚洲综合久久菠萝蜜| 中文字幕日韩综合| 欧美在线91| 国产欧美日韩综合精品二区| 精品三级久久| 夜夜嗨av一区二区三区免费区 | 色资源二区在线视频| 亚洲人成电影网站| 中国一区二区视频| 亚洲同性gay激情无套| 成年人三级黄色片| 51精产品一区一区三区| www.久久久| 丝袜诱惑一区二区| 一本大道亚洲视频| 国产丝袜视频在线观看| 亚洲国产日韩一级| 国产熟妇搡bbbb搡bbbb| 免费在线欧美视频| www插插插无码免费视频网站| 欧美调教视频| 国产精品国产自产拍高清av水多| 成人免费网址| 亚洲精品国精品久久99热一| 中文字幕日本视频| 一区二区三区在线影院| 国产三级视频网站| 狠狠色狠狠色综合系列| 日韩欧美一区二| 欧美肉体xxxx裸体137大胆| 亚洲在线免费看| 成人免费看视频网站| 久久久精品欧美| 深夜福利视频一区| 7777女厕盗摄久久久| 91av在线免费视频| 专区另类欧美日韩| 国产精品无码永久免费不卡| 久久国产夜色精品鲁鲁99| 777av视频| 99久久99视频只有精品| 精品久久久久久乱码天堂| 欧美综合影院| 欧美一级片一区| 在线视频中文字幕第一页| 亚洲欧美资源在线| 亚洲精品无码久久久| 在线观看日韩一区| 日韩欧美三级在线观看| 亚洲男人的天堂av| 欧美激情 一区| 成人国产电影网| 国内自拍第二页| 日韩精品久久久久久| www.日本在线视频| 久久精品国内一区二区三区水蜜桃| 久草热久草热线频97精品| 精品国产乱码一区二区三区| 国产精品普通话| 密臀av在线播放| 欧美俄罗斯性视频| 久草资源在线| 尤物九九久久国产精品的分类 | 成人动漫视频在线观看| 日韩av日韩在线观看| 欧美videosex性欧美黑吊| 久久精品国产综合| 国产综合视频一区二区三区免费| 亚洲国产精品久久久久秋霞不卡| 国产精品久久久久久久成人午夜| 色婷婷亚洲精品| 日韩黄色一级大片| 亚洲一区二区美女| 国产免费无码一区二区视频| 国产精品久久久久aaaa樱花| 免费观看a级片| 久久久91精品国产一区二区精品 | 日韩有码av| 国产98在线|日韩| 无人区乱码一区二区三区| 成人免费观看网址| 96sao精品免费视频观看| 国产精品视频久| 成人在线中文| 国产啪精品视频网站| 日韩欧美专区| 成人免费午夜电影| 国产日韩一区二区三免费高清| 国产日韩在线看片| 日韩专区视频网站| 91美女片黄在线观看游戏| 精品国产乱码一区二区三区| 91精品国产91久久久久青草| 一区二区三区高清在线观看| 国产高清一区视频| 欧美综合精品| 欧美日韩国产综合视频在线| 国产成人黄色| 亚洲精品白虎| 亚洲精品888| a级免费在线观看| 在线亚洲一区| 欧美两根一起进3p做受视频| 毛片av一区二区| 久久精品久久99| 国产成人自拍网| 国产精品久久不卡| 久久美女高清视频| 久久久久久成人网| 亚洲色大成网站www久久九九| 99热精品免费| 亚洲成a人在线观看| 精品不卡一区二区| 欧美天堂亚洲电影院在线播放| 国产露脸国语对白在线| 欧美一级免费观看| 午夜成人免费影院| 中文字幕在线观看日韩| 成人黄色网址| 热久久这里只有精品| 亚洲三级在线| 国产日韩欧美精品| 成人激情开心网| 久久av高潮av| 久久久精品网| 免费不卡av网站| 99国内精品久久| 国产一区第一页| 午夜精品久久久久影视| 中文字幕 自拍偷拍| 欧美变态口味重另类| 精品久久久久久亚洲综合网站 | 亚洲蜜桃精久久久久久久久久久久| 久久精品人人做人人综合 | 91久久在线观看| 亚洲欧美tv| 日韩精品手机在线观看| 久久成人国产| 少妇搡bbbb搡bbb搡打电话| 久久精品夜夜夜夜久久| 妺妺窝人体色www聚色窝仙踪 | 18岁视频在线观看| 国产一区二区精品久久99| 欧美丰满少妇人妻精品| 日韩美女视频19| 国产免费a视频| 亚洲高清福利视频| 99热国产在线中文| 国产精品日韩欧美大师| 欧美日韩一区二区三区在线电影| 中文精品视频一区二区在线观看| 国产一区白浆| 欧美熟妇精品一区二区| 中文字幕日韩精品一区| 国产91国语对白在线| 亚洲成成品网站| a视频在线播放| 国产精品免费一区| 色综合综合色| 尤物av无码色av无码| 国产精品一区二区在线观看不卡| 干b视频在线观看| 欧美日韩国产综合新一区 | 久久亚洲人体| 日本精品一区二区| 欧美亚洲视频| 中文字幕三级电影| 一区二区三区视频在线看| 波多野结衣黄色网址| 亚洲精品国产精品国产自| 不卡av免费观看| 99精品国产高清一区二区| 欧美激情偷拍自拍| 色综合天天色综合| 国产午夜精品一区二区| 国产成人一级片| 日韩电影免费观看中文字幕 | 天天做天天爱天天爽综合网| 国产一级特黄a大片免费| 久久久不卡影院| 潘金莲一级淫片aaaaaa播放| 亚洲精品资源在线| 欧美国产大片| 日韩高清国产精品| 麻豆国产精品777777在线| 久久久久久久久福利| 欧美性色综合网| 成人性爱视频在线观看| 国产精品偷伦视频免费观看国产| 国产伦精品一区二区三区视频| 蜜臀久久99精品久久久酒店新书| 久久久噜噜噜久久中文字幕色伊伊 | 国产精品 欧美在线| 成人免费电影网址| 91高清国产视频| 亚洲欧洲日韩女同| 国产毛片毛片毛片毛片毛片| 操日韩av在线电影| 91蜜桃臀久久一区二区| 欧美中日韩在线| ww亚洲ww在线观看国产| aaa在线视频| www国产精品com| 亚洲精品黑牛一区二区三区| 欧美视频在线观看网站| 久久日韩精品一区二区五区| 国产免费www| 久久天堂电影网| 欧美大片网址| 色七七在线观看| 自拍偷拍亚洲激情| 女人18毛片一区二区三区| 91av在线免费观看| heyzo久久| 佐山爱在线视频| 狠狠做深爱婷婷久久综合一区| 成人午夜电影在线观看| 91久久大香伊蕉在人线| 亚洲在线免费| 手机在线中文字幕| 精品国产3级a| 日韩一区二区三区免费视频| 日韩国产精品毛片| 99久久精品国产观看| 中文字幕激情视频| 欧美乱妇高清无乱码| 蜜臀av免费一区二区三区| 亚洲免费黄色录像| 婷婷综合久久一区二区三区| 69视频在线| 国内视频一区| 久草这里只有精品视频| 日韩污视频在线观看| 色噜噜久久综合伊人一本| 国产精品白浆| 九九热精品在线播放| 午夜精品福利一区二区三区av | 国产精品国产精品国产专区不蜜| 午夜精品一二三区| 国产精品色悠悠|