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

經(jīng)常用Redis,這些坑你知道嗎?

數(shù)據(jù)庫 其他數(shù)據(jù)庫 Redis
近些年,Redis憑借在性能、穩(wěn)定性和高可擴(kuò)展性上的卓越表現(xiàn),基本上已經(jīng)成了互聯(lián)網(wǎng)行業(yè)緩存中間件的標(biāo)配,甚至很多傳統(tǒng)行業(yè)也在使用Redis。那么我們在使用Redis等緩存中間件時(shí),要注意哪些問題呢?本文咱們就來聊聊,我們使用緩存中間件過程中曾經(jīng)遇到的坑!

近些年,Redis憑借在性能、穩(wěn)定性和高可擴(kuò)展性上的卓越表現(xiàn),基本上已經(jīng)成了互聯(lián)網(wǎng)行業(yè)緩存中間件的標(biāo)配,甚至很多傳統(tǒng)行業(yè)也在使用Redis。那么我們在使用Redis等緩存中間件時(shí),要注意哪些問題呢?本文咱們就來聊聊,我們使用緩存中間件過程中曾經(jīng)遇到的坑!

緩存穿透

先看一個(gè)常見的緩存使用方式。請求來了,先查緩存,緩存有值就直接返回;緩存沒值,查數(shù)據(jù)庫,然后把數(shù)據(jù)庫的值存到緩存,再返回。

假如緩存沒查到某個(gè)值,查數(shù)據(jù)庫也沒這個(gè)值,也就是說要查的值根本不存在,這樣就會導(dǎo)致每次對這個(gè)值的查詢請求都會穿透到數(shù)據(jù)庫。這就是所謂的“緩存穿透”。

如何避免緩存穿透?

如果從數(shù)據(jù)庫中沒查到值,可以在緩存中記錄一個(gè)空值,來避免“緩存穿透”。并且要給這個(gè)空值設(shè)置一個(gè)較短的過期時(shí)間。

比如說,我們經(jīng)常會把用戶信息緩存到Redis。如果調(diào)用方傳了一個(gè)不存在的UserID,在緩存中就查不到這個(gè)用戶信息,然后去DB也查不到。這樣就會導(dǎo)致,每次根據(jù)這個(gè)UserID查用戶信息,都會穿透到數(shù)據(jù)庫,給數(shù)據(jù)庫造成了壓力。為了避免緩存穿透,當(dāng)數(shù)據(jù)庫查不到時(shí),我們可以在緩存中記錄一條空數(shù)據(jù),比如userID做為key,空json做為值,如果程序獲得這個(gè)空json,就按用戶不存在處理。再給這個(gè)key設(shè)置一個(gè)很短的過期時(shí)間,比如30秒。

緩存雪崩

我們經(jīng)常會遇到需要初始化緩存的情況。比如說用戶系統(tǒng)重構(gòu),表結(jié)構(gòu)發(fā)生了變化,緩存信息也要變,上線前需要初始化緩存,將用戶信息批量存入緩存。假如我們給這些用戶信息設(shè)置相同的過期時(shí)間,到過期時(shí)間點(diǎn)所有用戶信息的緩存記錄就會同時(shí)集中失效,導(dǎo)致大量請求瞬間打到數(shù)據(jù)庫,數(shù)據(jù)庫很可能會被搞掛。這種緩存集中失效,導(dǎo)致大量請求同時(shí)穿透到數(shù)據(jù)庫的情況,就是所謂的“雪崩效應(yīng)”。

所以,當(dāng)我們向緩存初始化數(shù)據(jù)時(shí),要保證每個(gè)緩存記錄過期時(shí)間的離散性。可以采用一個(gè)較大的固定值加上一個(gè)較小的隨機(jī)值。比如過期時(shí)間可以是:10小時(shí) + 0到3600秒的隨機(jī)值。

緩存并發(fā)

當(dāng)系統(tǒng)并發(fā)很高,緩存數(shù)據(jù)尤其是熱點(diǎn)數(shù)據(jù)過期后,可能會出現(xiàn)多個(gè)請求同時(shí)訪問數(shù)據(jù)庫并設(shè)置緩存的情況,不但給數(shù)據(jù)庫帶來壓力,而且會有緩存頻繁更新的問題。

我們可以通過加鎖來避免緩存并發(fā)問題。如果從緩存查不到數(shù)據(jù),對查詢數(shù)據(jù)加分布式鎖,然后查數(shù)據(jù)庫并把數(shù)據(jù)庫查詢結(jié)果放入緩存。其他線程等待鎖釋放后,直接從緩存取值。

比如,電商系統(tǒng)會緩存商品SKU價(jià)格,一些熱點(diǎn)商品的并發(fā)訪問會非常高。當(dāng)緩存過期失效后,訪問請求從緩存查不到記錄,此時(shí)可以用商品SKU ID為Key加分布式鎖,然后從數(shù)據(jù)庫查詢價(jià)格并把價(jià)格放入緩存,最后解鎖。解鎖后其他請求就可以從緩存直接取值了。從而避免了數(shù)據(jù)庫的壓力。

分布式鎖

以我們之前做過的5人拼團(tuán)為例。如果有用戶參加團(tuán)購,我們需要先校驗(yàn)參團(tuán)人數(shù)是否達(dá)到了上限5人。如果沒達(dá)到5人,用戶才可以參團(tuán)。偽代碼如下:

  1. //根據(jù)拼團(tuán)ID獲取目前參團(tuán)成員數(shù)量 
  2. int numOfMembers = pinTuanService.getNumOfMembersById(pinTuanID); 
  3. if(numOfMembers < 5) { 
  4.   pinTuanService.pintuan();//執(zhí)行,加入拼團(tuán),生單等邏輯 
  5. }  

高并發(fā)場景下,上面的代碼會有很嚴(yán)重的問題。如果某個(gè)團(tuán)當(dāng)前的參團(tuán)人數(shù)是4,這時(shí)有兩個(gè)用戶同時(shí)參團(tuán),用戶A和用戶B的請求同時(shí)進(jìn)入上面的代碼塊,A和B的請求同時(shí)執(zhí)行到第2行代碼,獲取的numOfMembers都是4,表達(dá)式 numOfMembers < 5 成立,所以兩個(gè)用戶都能執(zhí)行到第4行代碼,就是說A用戶和B用戶都能成功參加拼團(tuán)。于是,參團(tuán)人數(shù)就超過了5人的上限。所以我們就需要加鎖來避免這個(gè)問題。synchronized行嗎?不行。因?yàn)槲覀兊姆?wù)是多節(jié)點(diǎn)部署的,所以要加分布式鎖。代碼如下:

  1. boolean aquired = distributedLock.aquireLock(pinTuanID, 3000); 
  2. if(aquired == true) { 
  3.   try{ 
  4.     //根據(jù)拼團(tuán)ID獲取目前參團(tuán)成員數(shù)量 
  5.     int numOfMembers = pinTuanService.getNumOfMembersById(pinTuanID); 
  6.     if(numOfMembers < 5) { 
  7.       pinTuanService.pintuan();//執(zhí)行,加入拼團(tuán),生單等邏輯 
  8.     }  
  9.   } finally { 
  10.     distributedLock.releaseLock(pinTuanID); 
  11.   } 

這樣就好多啦!接下來我們看看基于Redis分布式鎖的實(shí)現(xiàn),以及特別要注意的問題。一般我們會基于setnx實(shí)現(xiàn)Redis分布式鎖。setnx命令可以檢查key是否存在,如果key不存在,就在Redis中創(chuàng)建一個(gè)鍵值對(操作成功),如果key已經(jīng)存在就放棄執(zhí)行(操作失敗)。

先看一段基于Springboot實(shí)現(xiàn)的加鎖和釋放鎖的代碼:

  1. @Component 
  2. public class DistributedLock { 
  3.  
  4.  @Autowired 
  5.  private StringRedisTemplate redisTemplate; 
  6.   
  7.  /** 
  8.  * 加鎖 
  9.  * lockKey,redis的key 
  10.  * expireTime,過期時(shí)間,單位是毫秒 
  11.  * 注:setIfAbsent方法就使用了redis的setnx 
  12.  */ 
  13.   public boolean aquireLock(String lockKey, long expireTime) { 
  14.    long waitTime = 0; 
  15.    boolean success = redisTemplate.opsForValue().setIfAbsent(lockKey, "distributedLock"
  16.                      expireTime, TimeUnit.MILLISECONDS); 
  17.    if(success == true){ 
  18.       return success;    
  19.    } else { 
  20.      //如果加鎖失敗,循環(huán)重試加鎖 
  21.      while(success != true && waitTime < 5000L ) { 
  22.        success = redisTemplate.opsForValue().setIfAbsent(lockKey, "distributedLock"
  23.                        expireTime, TimeUnit.MILLISECONDS); 
  24.        sleep 100毫秒;                 
  25.        waitTime += 100L; 
  26.      } 
  27.    } 
  28.     
  29.    return success; 
  30.  } 
  31.   
  32.  /** 
  33.  * 釋放鎖 
  34.  * lockKey,redis的key 
  35.  */ 
  36.  public void releaseLock(String lockKey) { 
  37.    redisTemplate.delete(lockKey); 
  38.  }  
  39.   

上面的代碼。乍一看,好像沒什么問題!加鎖失敗有循環(huán)重試加鎖,過期時(shí)間設(shè)置了,而且也保證了創(chuàng)建Key-Value鍵值對和設(shè)置過期時(shí)間的原子性,這樣當(dāng)程序沒有正常釋放鎖時(shí),也能保證過期后鎖自動(dòng)釋放(注意:redis較老的版本不支持 setnx 和設(shè)置過期時(shí)間的原子操作,不過可以利用Lua腳本來保證原子性)。

我們再仔細(xì)思考一下,一般場景我們會對Key設(shè)置一個(gè)很短的過期時(shí)間,當(dāng)一次操作因?yàn)榫W(wǎng)絡(luò)等原因耗費(fèi)了較長時(shí)間,操作還沒完成key就過期失效了。這樣會產(chǎn)生什么問題呢?我們還是以拼團(tuán)為例加以說明,先看看下面這張圖:

 

 

 

 

如上圖,用戶A和用戶B同時(shí)參加同一團(tuán),團(tuán)ID為 001,我們以團(tuán)ID作為分布式鎖的Key,"distributedLock" 作為固定的Value,過期時(shí)間是5秒。A先獲取分布式鎖,但是由于網(wǎng)絡(luò)等原因A的拼團(tuán)操作在5秒內(nèi)沒完成,這時(shí)Key過期并從Redis清除掉,A的分布式鎖失效。此時(shí)用戶B拿到分布式鎖,Key也同樣是團(tuán)ID 001。在用戶B的拼團(tuán)邏輯執(zhí)行完之前,用戶A的邏輯先執(zhí)行完了,緊接著A就把鎖給釋放了。不過A的鎖早已經(jīng)過期失效了,B持有鎖的Key和A又完全一樣,所以此時(shí)A釋放的其實(shí)是B的鎖。這樣一來整個(gè)拼團(tuán)還是有可能會超員。怎么解決呢?

我們可以把分布式鎖的Value設(shè)成可以區(qū)分的值,比如拼團(tuán)的場景Value可以設(shè)置為userID,在釋放鎖的時(shí)候根據(jù)key和value來判斷當(dāng)前的鎖是不是自己的,只有Redis中userID和自己的userID相同才釋放鎖。

改進(jìn)后的代碼如下:

  1. @Component 
  2. public class DistributedLock { 
  3.  
  4.  @Autowired 
  5.  private StringRedisTemplate redisTemplate; 
  6.   
  7.  /** 
  8.  * 加鎖 
  9.  * lockKey,redis的key 
  10.  * expireTime,過期時(shí)間,單位是毫秒 
  11.  * 注:setIfAbsent方法就使用了redis的setnx 
  12.  */ 
  13.   public boolean aquireLock(String lockKey, String userID, long expireTime) { 
  14.    long waitTime = 0; 
  15.    boolean success = redisTemplate.opsForValue().setIfAbsent(lockKey, userID, 
  16.                      expireTime, TimeUnit.MILLISECONDS); 
  17.    if(success == true){ 
  18.       return success;    
  19.    } else { 
  20.      //如果加鎖失敗,循環(huán)重試加鎖 
  21.      while(success != true && waitTime < 5000L ) { 
  22.        success = redisTemplate.opsForValue().setIfAbsent(lockKey, userID, 
  23.                        expireTime, TimeUnit.MILLISECONDS); 
  24.        sleep 100毫秒;                 
  25.        waitTime += 100L; 
  26.      } 
  27.    } 
  28.     
  29.    return success; 
  30.  } 
  31.   
  32.  /** 
  33.  * 釋放鎖 
  34.  * lockKey,redis的key 
  35.  */ 
  36.  public void releaseLock(String lockKey, String userID) { 
  37.    String userIDFromRedis = redisTemplate.get(lockKey); 
  38.    if( userID.equals(userIDFromRedis) ) { 
  39.      redisTemplate.delete(lockKey); 
  40.    } 
  41.  }  
  42.   

還有一種場景需要考慮。當(dāng)Redis master發(fā)生故障,主備切換時(shí)往往會造成數(shù)據(jù)丟失,包括分布式鎖的Key-Value 也可能丟失。這樣就會導(dǎo)致操作還沒執(zhí)行完,鎖就被其他請求拿到了。Redis官方提供了Redlock算法,以及相應(yīng)的開源實(shí)現(xiàn) Redisson。用到分布式鎖的場景,大家可以直接使用 Redisson,非常方便。如果系統(tǒng)對可靠性要求很高,如需用到分布式鎖,建議使用 Zookeeper,etcd 等。 

 

 

責(zé)任編輯:龐桂玉 來源: 楊建榮的學(xué)習(xí)筆記
相關(guān)推薦

2020-10-28 11:20:55

vue項(xiàng)目技

2015-06-29 09:06:51

2020-11-18 07:52:08

2020-10-08 18:58:46

條件變量開發(fā)線程

2022-09-14 08:11:06

分頁模糊查詢

2015-07-03 11:20:41

編程學(xué)習(xí)方法

2021-08-05 18:21:29

Autowired代碼spring

2024-02-26 08:19:00

WebSpring容器

2016-01-11 09:48:07

2023-01-16 08:09:51

SpringMVC句柄

2024-02-19 00:00:00

Console函數(shù)鏈接庫

2018-05-11 15:53:59

2016-03-18 19:03:35

認(rèn)知計(jì)算IBM

2018-08-07 09:29:35

數(shù)據(jù)庫MySQL優(yōu)化方法

2021-11-10 15:37:49

Go源碼指令

2022-11-10 09:00:41

2017-11-09 15:29:21

CPU溫度常識

2019-07-08 10:18:38

MPLSIP數(shù)據(jù)

2018-02-06 09:40:25

PythonOOP繼承

2018-03-07 06:37:14

開源項(xiàng)目源代碼云計(jì)算
點(diǎn)贊
收藏

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

999日本视频| 一区二区三区天堂av| 男人添女荫道口喷水视频| 亚洲色图欧美视频| 奇米一区二区三区av| 亚洲欧洲av一区二区三区久久| 成人欧美在线视频| 国产成人精品一区二三区| 成人91在线| 欧美一区二区三区免费在线看| 国产深夜男女无套内射| 自拍视频在线| 国产成人免费视频精品含羞草妖精| 日韩av在线最新| 亚洲综合欧美激情| 9999精品成人免费毛片在线看| 日本一区二区久久| 国产精品制服诱惑| 亚洲一级在线播放| 美女黄色成人网| 日韩av在线播放资源| 高清一区在线观看| 91在线超碰| 成人免费小视频| 清纯唯美一区二区三区| 豆国产97在线 | 亚洲| 日产精品一区二区| 亚洲黄色在线看| www激情五月| 99久久精品一区二区成人| 亚洲国产人成综合网站| 色女人综合av| 国产精品xxxxxx| 亚洲午夜一级| 日韩视频免费大全中文字幕| 五月婷婷综合在线观看| 狠狠久久伊人| 亚洲成人激情综合网| 波多野结衣三级在线| 成年人视频免费在线观看| 99精品欧美一区| 91在线免费看片| 91tv国产成人福利| 久久精品女人| 日本精品一区二区三区在线播放视频 | 国精产品一区一区三区mba下载| 麻豆精品精品国产自在97香蕉| 尤物tv国产一区| 精品无码在线视频| 免费成人蒂法| 日韩大片在线观看视频| 中国极品少妇videossexhd| 亚洲一区二区三区在线免费 | 国产男男gay体育生白袜| 日韩精品一区第一页| 欧美最猛性xxxxx免费| 亚洲天堂日韩av| 国产欧美日韩一级| 2025国产精品视频| 国产精品人人人人| 久久综合图片| 精品国产一区二区三区四区在线观看 | 高清在线观看免费| 美女av在线免费看| 日韩欧美一区二区三区久久| 欧美极品欧美精品欧美图片| 成人片免费看| 欧美性xxxxx极品少妇| 中文亚洲免费| 一区二区三区亚洲| 一二三四国产精品| 久久综合88| 欧美精品日韩www.p站| 久久久久亚洲av片无码下载蜜桃| 激情久久一区| 日本精品一区二区三区在线播放视频| 日韩一级片中文字幕| 人人精品人人爱| 91日本在线观看| 午夜免费福利视频| 香蕉精品999视频一区二区| 91av在线看| 99精品在线播放| 麻豆freexxxx性91精品| 亚洲自拍偷拍视频| 无套内谢的新婚少妇国语播放| 91香蕉视频在线| 欧美福利一区二区三区| 亚洲s色大片| 99精品偷自拍| 日韩免费av电影| а√天堂官网中文在线| 亚洲成人动漫av| 天天天干夜夜夜操| 日韩免费成人| 亚洲欧美中文字幕在线一区| 亚洲欧美激情一区二区三区| 久草精品视频| 中文字幕亚洲在线| 国产精品1234区| 丝袜亚洲另类欧美| 99超碰麻豆| 国产区视频在线播放| caoporn国产一区二区| 日本欧洲国产一区二区| caoporn免费在线| 色天使久久综合网天天| 被黑人猛躁10次高潮视频| 蜜桃精品噜噜噜成人av| 色在人av网站天堂精品| 国语对白做受69按摩| 高清视频一区二区| 亚洲一区二区三区精品在线观看| av免费不卡| 欧美一区二区精品久久911| 一卡二卡三卡四卡| 欧美日韩91| 91精品国产综合久久男男| 天堂网www中文在线| 亚洲男女一区二区三区| 老司机午夜av| 欧美羞羞视频| 精品国产乱码久久久久久1区2区 | aa免费在线观看| 日韩在线精品强乱中文字幕| 伊人久久久久久久久久久| 国产性xxxx高清| 国产99久久久国产精品| 影音先锋欧美资源| 日韩国产网站| 亚洲免费av片| www.中文字幕在线观看| 国产不卡一区视频| 久久国产精品免费观看| 黄色欧美视频| 欧美一三区三区四区免费在线看 | 97香蕉久久夜色精品国产| 99在线小视频| 亚洲欧美偷拍三级| 欧美激情第3页| 日本成人手机在线| 俺去亚洲欧洲欧美日韩| 国产偷人爽久久久久久老妇app| 99久久久国产精品免费蜜臀| 久艹在线免费观看| 韩国成人二区| 色婷婷综合中文久久一本| 欧亚乱熟女一区二区在线| 欧美日本中文| 国产精品视频免费观看| 懂色av一区| 日韩免费电影一区| 国产亚洲精品码| 高清av一区二区| 久久亚洲中文字幕无码| 伦理一区二区| 亲子乱一区二区三区电影| 免费理论片在线观看播放老| 一本高清dvd不卡在线观看| 波多野吉衣中文字幕| 石原莉奈在线亚洲三区| 日韩午夜视频在线观看| 国产精品久久久久77777丨| 色七七影院综合| 99久久国产免费| 亚洲一区二区视频| 日本xxxx裸体xxxx| 日韩精品免费专区| 中文字幕一区二区三区5566| 麻豆一二三区精品蜜桃| 久久久久久久久综合| 五月激情丁香婷婷| 91福利在线免费观看| 日本视频在线免费| 国产成+人+日韩+欧美+亚洲| 噜噜噜久久亚洲精品国产品麻豆| 九九在线高清精品视频| 国产精品丝袜久久久久久不卡| 黄色在线免费网站| 欧美精品一区在线观看| 成人免费毛片视频| 亚洲视频一区二区免费在线观看| 无码人妻一区二区三区在线| 久久久久国产精品一区三寸 | 人妻 日韩 欧美 综合 制服| 国产精品老牛| 在线一区高清| 九九热播视频在线精品6| 国产精品日韩在线观看| 亚洲男同gay网站| 亚洲人成电影网站色| 国产又粗又长又大视频| 天天综合天天综合色| 四虎国产成人精品免费一女五男| 国产精品系列在线播放| 日韩 欧美 高清| 精品欧美视频| 欧美中文字幕在线播放| 黄色精品在线观看| 精品丝袜一区二区三区| 国产精品欧美激情在线| 狠狠躁夜夜躁人人爽超碰91| 亚洲欧美精品久久| 91蜜桃婷婷狠狠久久综合9色| 嫩草影院国产精品| 激情欧美国产欧美| 中国人体摄影一区二区三区| 日本成人a网站| 97av自拍| 91p九色成人| 91国内揄拍国内精品对白| 免费av在线| 国产亚洲精品美女| 亚洲免费成人在线| 欧美精品少妇一区二区三区| 无码一区二区三区| 亚洲成人av一区| 国产女片a归国片aa| 久久精品夜色噜噜亚洲a∨| 97精品人妻一区二区三区蜜桃| 久久精品国产精品亚洲精品| 国产又大又硬又粗| 国产视频一区欧美| 97超碰在线人人| 欧美国内亚洲| 三年中国中文在线观看免费播放| 精品久久美女| 欧洲视频一区二区三区| 欧美大胆视频| 国产一区二区三区四区hd| 日韩区一区二| 91欧美精品成人综合在线观看| 91超碰碰碰碰久久久久久综合| 欧美在线欧美在线| 欧美男人天堂| 97视频在线观看视频免费视频 | 亚洲夂夂婷婷色拍ww47| www深夜成人a√在线| 中文字幕乱码一区二区免费| 国产精品20p| 久久精品这里都是精品| 亚洲一区二区观看| 成人的网站免费观看| 丰满熟女人妻一区二区三区| 国产盗摄视频一区二区三区| 中文字幕avav| 国产精品一区二区在线播放 | 国产永久免费视频| 在线综合亚洲欧美在线视频| 国产尤物在线观看| 日韩亚洲欧美成人一区| 激情综合网五月婷婷| 亚洲精品一二三四区| 印度午夜性春猛xxx交| 亚洲人吸女人奶水| 欧美日韩大片在线观看| 一区二区三区成人| 豆国产97在线 | 亚洲| 亚洲图片欧美视频| 中日韩黄色大片| 色国产综合视频| 亚洲免费视频二区| 欧美精品 日韩| 性一交一乱一精一晶| 亚洲精品一区二区三区四区高清| 亚洲 欧美 激情 另类| 亚洲欧美激情精品一区二区| h视频在线播放| 久久天天躁日日躁| 麻豆导航在线观看| 亚洲无限av看| a级网站在线播放| 久久久中文字幕| 日韩免费福利视频| 国产这里只有精品| 加勒比久久高清| 欧美日本韩国在线| 97精品国产福利一区二区三区| 2021国产视频| 免费欧美日韩| 亚洲综合av在线播放| 丁香六月综合激情| 精品无人区无码乱码毛片国产| 国产精品美女一区二区| 精品无码av在线| 91福利在线观看| 性一交一乱一透一a级| 亚洲欧洲免费视频| 成人直播在线| 日本精品一区二区三区在线| 激情视频亚洲| 欧美日韩一区二区三区免费| 97久久夜色精品国产| 精品无码国模私拍视频| 蜜臀久久99精品久久久久宅男| aaa黄色大片| 亚洲欧洲无码一区二区三区| 久久久久国产精品夜夜夜夜夜| 亚洲深夜av| 国产一区二区黑人欧美xxxx| аⅴ资源新版在线天堂| 欧美日韩成人在线观看| 精品欧美一区二区三区在线观看| 999视频在线免费观看| 狠狠色丁香婷婷综合影院| www.欧美黄色| 久久99精品国产91久久来源| 99久久国产宗和精品1上映| 韩国av一区二区三区| 亚洲视频一二三四| 91丝袜美腿高跟国产极品老师 | 一区二区三区欧美亚洲| www.色国产| 精品国产伦一区二区三区观看方式 | 一区二区不卡视频| 亚洲精品一级| 欧美日韩一区二区区| 国产精品美女一区二区| 国产suv精品一区二区33| 亚洲第一视频在线观看| 国产精品久久麻豆| 国产精品激情自拍| 亚洲精品中文字幕99999| 美脚丝袜脚交一区二区| 国产一区二区三区综合| 成人亚洲免费视频| 国产日韩欧美一区二区三区乱码| 91精品国产高潮对白| 日韩欧美一级二级三级| 黄色片网站在线| 91精品久久久久久久久久久久久久| 希岛爱理av免费一区二区| 日韩视频在线视频| 成人天堂资源www在线| 久久机热这里只有精品| 日韩美女一区二区三区| 国产婷婷视频在线| 91在线观看免费高清完整版在线观看| 成人羞羞网站| 国产野外作爱视频播放| 欧美韩国日本不卡| 少妇视频一区二区| 欧美三级电影网| 成人亚洲综合天堂| 国产精品国语对白| 欧美午夜精品一区二区三区电影| 国产精品欧美激情在线观看| 97国产精品videossex| 国产欧美日韩另类| 国产丝袜精品第一页| 男人av在线播放| 欧美视频观看一区| 肉色丝袜一区二区| xxxxx99| 69av一区二区三区| free性欧美hd另类精品| 国产精品视频免费一区| 亚洲综合日本| av手机在线播放| 欧美日韩国产综合久久| 黄色免费在线看| 国产免费一区| 蜜桃av综合| 午夜精品久久久久99蜜桃最新版| 欧美日韩成人一区二区| 伊人影院在线视频| 国产嫩草一区二区三区在线观看 | 亚洲丝袜精品丝袜在线| www.我爱av| 清纯唯美亚洲综合| 久久精品不卡| 人妻少妇偷人精品久久久任期| 亚洲国产中文字幕在线视频综合| 亚洲欧美色视频| 国产欧美日韩免费| 欧美午夜久久| 欧美特黄一区二区三区| 欧美日韩国产经典色站一区二区三区| h视频在线免费观看| 久久精品日产第一区二区三区乱码| 玖玖视频精品| 强行糟蹋人妻hd中文| 亚洲精品色婷婷福利天堂| 欧美爱爱视频| 成人免费视频91| 国产一区二区三区精品视频| 久久久综合久久久| 国产亚洲精品va在线观看| 国产视频一区二| 国产精品免费成人| 亚洲欧洲综合另类| 日本啊v在线| 91久色国产| 久久中文精品| 国产精品1000| 日韩中文字幕在线精品| 精品五月天堂| 色18美女社区| 在线观看网站黄不卡| 人人澡人人添人人爽一区二区|