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

緩存穿透、緩存擊穿和緩存雪崩實(shí)踐

存儲 存儲軟件
我們使用緩存的主要目是提升查詢速度和保護(hù)數(shù)據(jù)庫等稀缺資源不被占滿。而緩存最常見的問題是緩存穿透、擊穿和雪崩,在高并發(fā)下這三種情況都會有大量請求落到數(shù)據(jù)庫,導(dǎo)致數(shù)據(jù)庫資源占滿,引起數(shù)據(jù)庫故障。

[[281365]]

我們使用緩存的主要目是提升查詢速度和保護(hù)數(shù)據(jù)庫等稀缺資源不被占滿。而緩存最常見的問題是緩存穿透、擊穿和雪崩,在高并發(fā)下這三種情況都會有大量請求落到數(shù)據(jù)庫,導(dǎo)致數(shù)據(jù)庫資源占滿,引起數(shù)據(jù)庫故障。今天我主要分享一下layering-cache緩存框架在這個三個問題上的實(shí)踐方案。

概念

緩存穿透

在高并發(fā)下,查詢一個不存在的值時,緩存不會被命中,導(dǎo)致大量請求直接落到數(shù)據(jù)庫上,如活動系統(tǒng)里面查詢一個不存在的活動。

緩存擊穿

在高并發(fā)下,對一個特定的值進(jìn)行查詢,但是這個時候緩存正好過期了,緩存沒有命中,導(dǎo)致大量請求直接落到數(shù)據(jù)庫上,如活動系統(tǒng)里面查詢活動信息,但是在活動進(jìn)行過程中活動緩存突然過期了。

緩存雪崩

在高并發(fā)下,大量的緩存key在同一時間失效,導(dǎo)致大量的請求落到數(shù)據(jù)庫上,如活動系統(tǒng)里面同時進(jìn)行著非常多的活動,但是在某個時間點(diǎn)所有的活動緩存全部過期。

常見解決方案

  • 直接緩存NULL值
  • 限流
  • 緩存預(yù)熱
  • 分級緩存
  • 緩存永遠(yuǎn)不過期

layering-cache實(shí)踐

在layering-cache里面結(jié)合了緩存NULL值,緩存預(yù)熱,限流、分級緩存和間接的實(shí)現(xiàn)"永不過期"等幾種方案來應(yīng)對緩存穿透、擊穿和雪崩問題。

直接緩存NULL值

應(yīng)對緩存穿透最有效的方法是直接緩存NULL值,但是緩存NULL的時間不能太長,否則NULL數(shù)據(jù)長時間得不到更新,也不能太短,否則達(dá)不到防止緩存擊穿的效果。

我在layering-cache對NULL值進(jìn)行了特殊處理,一級緩存不允許存NULL值,二級緩存可以配置緩存是否允許存NULL值,如果配置可以允許存NULL值,框架還支持配置緩存非空值和NULL值之間的過期時間倍率,這使得我們能精準(zhǔn)的控制每一個緩存的NULL值過期時間,控制粒度非常細(xì)。當(dāng)NULL緩存過期我還可以使用限流,緩存預(yù)熱等手段來防止穿透。

示例:

  1. @Cacheable(value = "people"key = "#person.id", depict = "用戶信息緩存"
  2.         firstCache = @FirstCache(expireTime = 10, timeUnit = TimeUnit.MINUTES), 
  3.         secondaryCache = @SecondaryCache(expireTime = 10, timeUnit = TimeUnit.HOURS, 
  4.                 isAllowNullValue = true, magnification = 10)) 
  5. public Person findOne(Person person) { 
  6.     Person p = personRepository.findOne(Example.of(person)); 
  7.     logger.info("為id、key為:" + p.getId() + "數(shù)據(jù)做了緩存"); 
  8.     return p; 

在這個例子里面isAllowNullValue = true表示允許換存NULL值,magnification = 10表示NULL值和非NULL值之間的時間倍率是10,也就是說當(dāng)緩存值為NULL是,二級緩存的有效時間將是1個小時。

限流

應(yīng)對緩存穿透的常用方法之一是限流,常見的限流算法有滑動窗口,令牌桶算法和漏桶算法,或者直接使用隊(duì)列、加鎖等,在layering-cache里面我主要使用分布式鎖來做限流。

layering-cache數(shù)據(jù)讀取流程:

 

數(shù)據(jù)讀取流程.jpg

下面是讀取數(shù)據(jù)的核心代碼:

  1. private <T> T executeCacheMethod(RedisCacheKey redisCacheKey, Callable<T> valueLoader) { 
  2.     Lock redisLock = new Lock(redisTemplate, redisCacheKey.getKey() + "_sync_lock"); 
  3.     // 同一個線程循環(huán)20次查詢緩存,每次等待20毫秒,如果還是沒有數(shù)據(jù)直接去執(zhí)行被緩存的方法 
  4.     for (int i = 0; i < RETRY_COUNT; i++) { 
  5.         try { 
  6.             // 先取緩存,如果有直接返回,沒有再去做拿鎖操作 
  7.             Object result = redisTemplate.opsForValue().get(redisCacheKey.getKey()); 
  8.             if (result != null) { 
  9.                 logger.debug("redis緩存 key= {} 獲取到鎖后查詢查詢緩存命中,不需要執(zhí)行被緩存的方法", redisCacheKey.getKey()); 
  10.                 return (T) fromStoreValue(result); 
  11.             } 
  12.  
  13.  
  14.             // 獲取分布式鎖去后臺查詢數(shù)據(jù) 
  15.             if (redisLock.lock()) { 
  16.                 T t = loaderAndPutValue(redisCacheKey, valueLoader, true); 
  17.                 logger.debug("redis緩存 key= {} 從數(shù)據(jù)庫獲取數(shù)據(jù)完畢,喚醒所有等待線程", redisCacheKey.getKey()); 
  18.                 // 喚醒線程 
  19.                 container.signalAll(redisCacheKey.getKey()); 
  20.                 return t; 
  21.             } 
  22.             // 線程等待 
  23.             logger.debug("redis緩存 key= {} 從數(shù)據(jù)庫獲取數(shù)據(jù)未獲取到鎖,進(jìn)入等待狀態(tài),等待{}毫秒", redisCacheKey.getKey(), WAIT_TIME); 
  24.             container.await(redisCacheKey.getKey(), WAIT_TIME); 
  25.         } catch (Exception e) { 
  26.             container.signalAll(redisCacheKey.getKey()); 
  27.             throw new LoaderCacheValueException(redisCacheKey.getKey(), e); 
  28.         } finally { 
  29.             redisLock.unlock(); 
  30.         } 
  31.     } 
  32.     logger.debug("redis緩存 key={} 等待{}次,共{}毫秒,任未獲取到緩存,直接去執(zhí)行被緩存的方法", redisCacheKey.getKey(), RETRY_COUNT, RETRY_COUNT * WAIT_TIME, WAIT_TIME); 
  33.     return loaderAndPutValue(redisCacheKey, valueLoader, true); 

當(dāng)需要加載緩存的時候,需要獲取到鎖才有權(quán)限到后臺去加載緩存數(shù)據(jù),否則就會等待(同一個線程循環(huán)20次查詢緩存,每次等待20毫秒,如果還是沒有數(shù)據(jù)直接去執(zhí)行被緩存的方法,這個主要是為了防止獲取到鎖并且去加載緩存的線程出問題,沒有返回而導(dǎo)致死鎖)。當(dāng)獲取到鎖的線程執(zhí)行完成會將獲取到的數(shù)據(jù)放到緩存中,并且喚醒所有等待線程。

這里需要注意一下讓線程等待一定不能用Thread.sleep(),我在使用Spring Redis Cache的時候,我發(fā)現(xiàn)當(dāng)并發(fā)達(dá)到300左右,緩存一旦過期就會引起死鎖,原因是使用的是sleep方法來讓沒有獲取到鎖的線程等待,當(dāng)?shù)却木€程很多的時候會產(chǎn)生大量上下文切換,導(dǎo)致獲取到鎖的線程一直獲取不到cpu的執(zhí)行權(quán),導(dǎo)致死鎖。在layering-cache里面,我們使用的是LockSupport.parkNanos方法,它會釋放cpu資源, 因?yàn)槲覀兪褂玫氖莚edis分布式鎖,所以也不能使用wait-notify機(jī)制。

緩存預(yù)熱

有效應(yīng)對緩存的擊穿和雪崩的方式之一是緩存預(yù)加載。

  1. @Cacheable(value = "people"key = "#person.id", depict = "用戶信息緩存"
  2.         firstCache = @FirstCache(expireTime = 10, timeUnit = TimeUnit.MINUTES), 
  3.         secondaryCache = @SecondaryCache(expireTime = 10, preloadTime = 2,timeUnit = TimeUnit.HOURS,)) 
  4. public Person findOne(Person person) { 
  5.     Person p = personRepository.findOne(Example.of(person)); 
  6.     logger.info("為id、key為:" + p.getId() + "數(shù)據(jù)做了緩存"); 
  7.     return p; 

在 layering-cache里面二級緩存會配置兩個時間,expireTime是緩存的過期時間,preloadTime 是緩存的刷新時間(預(yù)加載時間)。每次二級緩存被命中都會去檢查緩存的過去時間是否小于刷新時間,如果小于就會開啟一個異步線程預(yù)先去更新緩存,并將新的值放到緩存中,有效的保證了熱點(diǎn)數(shù)據(jù)**"永不過期"**。這里預(yù)先更新緩存也是需要加鎖的,并不是所有的線程都會落到庫上刷新緩存,如果沒有獲取到鎖就直接結(jié)束當(dāng)前線程。

  1. /** 
  2.  * 刷新緩存數(shù)據(jù) 
  3.  */ 
  4. private <T> void refreshCache(RedisCacheKey redisCacheKey, Callable<T> valueLoader, Object result) { 
  5.     Long ttl = redisTemplate.getExpire(redisCacheKey.getKey()); 
  6.     Long preload = preloadTime; 
  7.     // 允許緩存NULL值,則自動刷新時間也要除以倍數(shù) 
  8.     boolean flag = isAllowNullValues() && (result instanceof NullValue || result == null); 
  9.     if (flag) { 
  10.         preload = preload / getMagnification(); 
  11.     } 
  12.     if (null != ttl && ttl > 0 && TimeUnit.SECONDS.toMillis(ttl) <= preload) { 
  13.         // 判斷是否需要強(qiáng)制刷新在開啟刷新線程 
  14.         if (!getForceRefresh()) { 
  15.             logger.debug("redis緩存 key={} 軟刷新緩存模式", redisCacheKey.getKey()); 
  16.             softRefresh(redisCacheKey); 
  17.         } else { 
  18.             logger.debug("redis緩存 key={} 強(qiáng)刷新緩存模式", redisCacheKey.getKey()); 
  19.             forceRefresh(redisCacheKey, valueLoader); 
  20.         } 
  21.     } 
  1. /** 
  2.  * 硬刷新(執(zhí)行被緩存的方法) 
  3.  * 
  4.  * @param redisCacheKey {@link RedisCacheKey} 
  5.  * @param valueLoader   數(shù)據(jù)加載器 
  6.  */ 
  7. private <T> void forceRefresh(RedisCacheKey redisCacheKey, Callable<T> valueLoader) { 
  8.     // 盡量少的去開啟線程,因?yàn)榫€程池是有限的 
  9.     ThreadTaskUtils.run(() -> { 
  10.         // 加一個分布式鎖,只放一個請求去刷新緩存 
  11.         Lock redisLock = new Lock(redisTemplate, redisCacheKey.getKey() + "_lock"); 
  12.         try { 
  13.             if (redisLock.lock()) { 
  14.                 // 獲取鎖之后再判斷一下過期時間,看是否需要加載數(shù)據(jù) 
  15.                 Long ttl = redisTemplate.getExpire(redisCacheKey.getKey()); 
  16.                 if (null != ttl && ttl > 0 && TimeUnit.SECONDS.toMillis(ttl) <= preloadTime) { 
  17.                     // 加載數(shù)據(jù)并放到緩存 
  18.                     loaderAndPutValue(redisCacheKey, valueLoader, false); 
  19.                 } 
  20.             } 
  21.         } catch (Exception e) { 
  22.             logger.error(e.getMessage(), e); 
  23.         } finally { 
  24.             redisLock.unlock(); 
  25.         } 
  26.     }); 

在緩存總量和并發(fā)量都很大的時候,這個時候緩存如果同時失效,緩存預(yù)熱將是一個非常慢長的過程,就比如說服務(wù)重啟或新上線一個新的緩存。這個時候我們可以采用切流的方式,讓緩存慢慢預(yù)熱,如開始切10%流量,觀察沒有異常后,再切30%流量,觀察沒有異常后,再切60%流量,然后全量。這種方式雖然有點(diǎn)繁瑣,但是一旦遇到異常我們可以快速的切回流量,讓風(fēng)險可控。

總結(jié)

總體來說layering-cache在緩存穿透、擊穿和雪崩上是以預(yù)防為主,補(bǔ)救為輔。而在應(yīng)對緩存的這些問題上其實(shí)也沒有一個完全完美的方案,只有最適合自己業(yè)務(wù)系統(tǒng)的方案。目前如果直接使用layering-cache緩存框架已經(jīng)基本能應(yīng)對大部分的緩存問題了。

源碼

https://github.com/wyh-chenfeng/layering-cache

layering-cache

為監(jiān)控而生的多級緩存框架 layering-cache這是我開源的一個多級緩存框架的實(shí)現(xiàn),如果有興趣可以看一下。

作者:xiaolyuh

原文地址:https://my.oschina.net/u/3748347/blog/2995017

責(zé)任編輯:武曉燕 來源: 博客園
相關(guān)推薦

2019-10-12 14:19:05

Redis數(shù)據(jù)庫緩存

2023-03-10 13:33:00

緩存穿透緩存擊穿緩存雪崩

2021-12-25 22:28:27

緩存穿透緩存擊穿緩存雪崩

2021-06-05 09:01:01

Redis緩存雪崩緩存穿透

2020-03-16 14:57:24

Redis面試雪崩

2022-03-08 00:07:51

緩存雪崩數(shù)據(jù)庫

2022-05-27 07:57:20

緩存穿透緩存雪崩緩存擊穿

2022-11-18 14:34:28

2025-06-30 01:55:00

2023-11-10 14:58:03

2024-03-12 10:44:42

2023-04-14 07:34:19

2023-12-06 13:38:00

Redis緩存穿透緩存擊穿

2020-10-13 07:44:40

緩存雪崩 穿透

2025-09-19 07:46:10

2020-10-23 10:46:03

緩存雪崩擊穿

2020-12-28 12:37:36

緩存擊穿穿透

2020-03-05 09:09:18

緩存原因方案

2022-07-11 07:36:36

緩存緩存雪崩緩存擊穿

2024-04-07 00:00:02

Redis雪崩緩存
點(diǎn)贊
收藏

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

国产在线一二| 在线免费观看亚洲视频| 欧美人体一区二区三区| 中文字幕第一区二区| 91久久久久久久久久久久久| 久草视频手机在线观看| 午夜先锋成人动漫在线| 欧美日韩亚洲不卡| 高清无码视频直接看| 日韩电影免费| 久久99国产乱子伦精品免费| 午夜精品久久久久久久99黑人 | 美女18一级毛片一品久道久久综合| 久久精品人人做人人爽97| 成人免费观看网址| www.国产高清| 亚洲成av人电影| 亚洲精品永久免费| 免费黄视频在线观看| 婷婷激情一区| 亚洲在线观看免费| 亚洲日本精品国产第一区| 色呦呦中文字幕| 蜜桃精品视频在线| 青青草成人在线| 国产少妇在线观看| 欧美日韩一区二区三区视频播放| 亚洲精品一区二区在线观看| 色天使在线观看| 亚洲精品中文字幕| 亚洲线精品一区二区三区八戒| 亚洲一区二区三区午夜| 日韩资源在线| 成人综合婷婷国产精品久久| 国产999精品| 免费观看一级视频| 欧美一区影院| 久久精品国产免费观看| 日韩一级av毛片| 神马午夜久久| 亚洲成人a**站| 五月天婷婷在线观看视频| 国产精品videossex撒尿| 精品成人在线视频| av在线播放天堂| 超碰在线网址| 国产精品亲子乱子伦xxxx裸| 欧美午夜精品久久久久免费视| 国内爆初菊对白视频| 国产福利一区二区三区视频在线 | 久久久国产91| 久久精品国产亚洲AV成人婷婷| 免费精品国产| 亚洲精选中文字幕| 亚洲乱码国产乱码精品精大量| 国产精品午夜av| 欧美精品一区男女天堂| 久久久999精品视频| 波多野结衣之无限发射| 怡红院av在线| 亚洲欧美国产77777| 一区二区三区av在线| 91精品国产91久久久久游泳池 | 高清国产在线一区| 精品人妻伦一区二区三区久久| 激情久久五月天| 91久久国产精品91久久性色| 国产色片在线观看| 国产精品亚洲一区二区三区妖精 | 欧美老妇交乱视频| 麻豆视频在线观看| 亚洲欧洲一区| 全球成人中文在线| 国产男人搡女人免费视频| 日本麻豆一区二区三区视频| 国产精品福利网| 亚洲无码精品国产| 国产精品一区二区三区网站| 国产乱码精品一区二区三区中文 | 爱福利视频一区二区| 欧美电影免费观看网站| 欧美日韩午夜影院| 妖精视频在线观看| 青青视频一区二区| 欲色天天网综合久久| 男的操女的网站| 在线精品一区二区| 国产成人综合一区二区三区| 91片黄在线观看喷潮| 国产成人综合自拍| 久久久久成人精品免费播放动漫| 国产在线观看精品一区| 中文字幕一区在线观看| 日本wwwcom| 黄色在线网站噜噜噜| 欧美亚洲自拍偷拍| 国产人妻精品午夜福利免费| 伊人成综合网yiren22| 中文字幕av一区中文字幕天堂 | 91精品美女在线| 日本精品久久久久久| 欧美激情一区二区三区不卡| 免费一级淫片aaa片毛片a级| 欧美亚洲韩国| 91精品国产91久久综合桃花| 中国一级特黄录像播放| 欧美调教在线| 久久精视频免费在线久久完整在线看| 国产午夜精品无码| 精品一区二区三区香蕉蜜桃| 国产专区一区二区三区| 黄色精品免费看| 欧美日韩亚洲91| 色姑娘综合天天| 精品国产网站| 777精品视频| 国产探花精品一区二区| 国产午夜精品久久久久久久| 精品视频在线观看一区二区| 久久免费资源| 亚洲精品视频久久| 国产在线拍揄自揄拍| 蜜芽一区二区三区| 久久综合九色综合久99| 日本大片在线播放| 欧美日韩精品欧美日韩精品| 99久久人妻精品免费二区| 91精品蜜臀一区二区三区在线| 日本欧美国产在线| 少妇精品高潮欲妇又嫩中文字幕| 亚洲日本中文字幕区| 久久久国产欧美| 香蕉人人精品| 国内精品久久久| 国产成人精品一区二区无码呦| 国产精品免费视频观看| 男人透女人免费视频| 精品亚洲免a| 欧美高清激情视频| 国产av一区二区三区精品| 国产色91在线| 免费在线观看毛片网站| 亚洲精品456| 98精品国产自产在线观看| www.天堂在线| 亚洲精品水蜜桃| 精品综合久久久久| 欧美第十八页| 成人精品视频在线| 黄网址在线观看| 7777女厕盗摄久久久| 一级片黄色录像| 蜜臀国产一区二区三区在线播放 | 欧美性生交xxxxx| 国精品一区二区三区| 91一区二区三区| 污片在线免费观看| 欧美va亚洲va国产综合| 久久免费播放视频| 成人av先锋影音| 国产午夜大地久久| 亚洲区小说区图片区qvod按摩| 日本韩国欧美精品大片卡二| 欧美91精品久久久久国产性生爱| 欧美三级xxx| 日韩av在线看免费观看| 视频一区在线播放| 亚洲乱码一区二区三区| 国产成人免费视频网站视频社区| 久久影视电视剧免费网站清宫辞电视| 国产日本精品视频| 亚洲愉拍自拍另类高清精品| av无码一区二区三区| 亚洲欧美日韩国产综合精品二区| 日本一区二区视频| 日韩欧美专区| 欧美黄色性视频| 三级av在线| 欧美喷潮久久久xxxxx| 欧美日韩免费做爰视频| 99r国产精品| 少妇黄色一级片| 伊人久久大香线| 国产有色视频色综合| 向日葵视频成人app网址| www欧美日韩| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 日韩欧美亚洲国产一区| 成年人视频软件| 国产91富婆露脸刺激对白| 动漫av网站免费观看| 99久久久国产精品美女| 国产精品二区二区三区| 日韩欧美一区二区三区免费观看| 精品久久久91| 青青青草网站免费视频在线观看| 欧美日韩在线亚洲一区蜜芽| 国产在线观看免费av| 国产精品丝袜久久久久久app| 中文字幕 欧美 日韩| 久久久久久穴| 糖心vlog在线免费观看| 伊人久久大香线蕉av不卡| 91免费欧美精品| 91精品论坛| 欧美大片免费观看在线观看网站推荐| 天堂av在线7| 日韩欧美国产精品一区| 波多野结衣一二区| 亚洲午夜视频在线观看| 国产成人精品视频免费| 白白色 亚洲乱淫| 国产日韩欧美久久| 免费永久网站黄欧美| 超碰10000| 日本电影一区二区| 国语精品免费视频| 视频一区国产| 国产精品一区二区久久国产| 一区二区精品伦理...| 欧美日韩福利在线观看| 一级毛片视频在线| 亚洲人成在线观看| 婷婷伊人综合中文字幕| 日韩欧美第一区| 91禁在线观看| 欧美在线看片a免费观看| 99热在线观看免费精品| 一区二区三区在线播| 人人艹在线视频| 国产清纯白嫩初高生在线观看91 | 亚洲视频一区在线| 国产成人免费观看网站| 久久蜜桃一区二区| 国产精品无码在线| 成人精品视频.| 日本wwwxx| 国产黄色91视频| 91精品视频国产| 极品少妇xxxx精品少妇| 艹b视频在线观看| 日韩精品一区第一页| 日本成年人网址| 亚洲影视在线| 欧美在线观看成人| 亚洲免费中文| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 99成人免费视频| 国产亚洲欧美在线视频| 宅男噜噜噜66国产日韩在线观看| 欧美综合在线播放| 一本色道精品久久一区二区三区 | 精品国产精品网麻豆系列| www.国产黄色| 欧美一级夜夜爽| 国产黄色一级大片| 日韩精品自拍偷拍| 秋霞av鲁丝片一区二区| 日韩av一区二区在线| 亚洲三级黄色片| 亚洲色图13p| 川上优的av在线一区二区| 最新的欧美黄色| 国产激情视频在线观看| 欧美激情免费在线| 久久男人天堂| 国产91网红主播在线观看| 国产经典一区| 91久久国产综合久久91精品网站 | 精品国产乱码久久久久久蜜柚| 日本午夜精品| 少妇精品久久久久久久久久| 四虎国产精品免费观看| 裸体裸乳免费看| 国产精品99一区二区| 男人用嘴添女人下身免费视频| 久久xxxx| 日本一二区免费| 国产高清无密码一区二区三区| 一起草在线视频| 国产亚洲欧美日韩俺去了| 97在线观看免费高| 亚洲成人综合在线| 亚洲av综合一区| 日韩一区二区三区四区| 亚洲日本香蕉视频| 啊v视频在线一区二区三区| 毛片在线网址| 国产ts一区二区| 精品视频在线观看网站| 国产主播一区二区三区四区| 日韩国产一区二区| 欧美一级免费播放| 麻豆成人综合网| 日本精品一二三区| 国产女人aaa级久久久级| 手机在线免费看毛片| 色综合网站在线| 国产喷水福利在线视频| 日韩精品丝袜在线| 黄网站视频在线观看| 91av在线看| 国产精品欧美一区二区三区不卡 | 99久久九九| 美女福利视频在线| 国产成都精品91一区二区三| 欧美做受高潮6| 亚洲午夜视频在线观看| 亚洲系列在线观看| 亚洲另类欧美自拍| 欧美韩日亚洲| 成人网欧美在线视频| 在线观看欧美理论a影院| 8x8ⅹ国产精品一区二区二区| 日韩电影在线免费看| 韩国无码一区二区三区精品| 亚洲色图另类专区| jizz国产在线| 亚洲精品国产精品国自产在线 | 欧美中文在线观看| 亚洲精品观看| 9999在线观看| 日韩一区精品视频| 三级网站在线免费观看| 亚洲成国产人片在线观看| 99国产在线播放| 色妞久久福利网| 日本欧美一区| 欧美日韩国产三区| 99综合视频| 最新国产精品自拍| 亚洲精品精品亚洲| 国产一区二区三区黄片| 色yeye香蕉凹凸一区二区av| 女生影院久久| 日本欧美色综合网站免费| 午夜一级久久| 蜜臀av一区二区三区有限公司| 亚洲r级在线视频| 日本毛片在线观看| 久久久久久久91| 亚洲成人影音| 成人在线视频一区二区三区 | 中文成人无字幕乱码精品区| 一区二区三区在线免费观看 | 国产激情视频一区二区在线观看 | 亚洲s色大片| 国产精品一区电影| 91欧美在线| 夜夜夜夜夜夜操| 国产精品福利一区| 国产精品久久免费| 久久精品电影一区二区| 精品久久国产一区| 狠狠精品干练久久久无码中文字幕| 韩国v欧美v日本v亚洲v| 永久久久久久久| 日韩女优制服丝袜电影| 色www永久免费视频首页在线| 国产精品自拍首页| 国产精品嫩草99av在线| 一区二区黄色片| 欧美三级韩国三级日本一级| 日本成人网址| 92国产精品视频| 亚洲精品激情| 国产成人无码精品久久二区三| 欧洲一区在线观看| 老司机av在线免费看| 波多野结衣久草一区| 国产日韩欧美| 永久免费毛片在线观看| 91精品免费观看| jizzjizz中国精品麻豆| 日本一区二区精品视频| 国内精品伊人久久久久av一坑| 成人免费看片98| 亚洲欧洲一区二区三区久久| 四虎成人精品一区二区免费网站| 久久久久久久久网| 91在线一区二区| 伊人久久国产精品| 久精品免费视频| 在线日韩一区| 成人免费黄色av| 欧美日韩另类在线| 日本综合在线| 国产精品一国产精品最新章节| 水野朝阳av一区二区三区| 在线视频这里只有精品| 精品区一区二区| av激情成人网| 欧美午夜小视频| 中文字幕在线免费不卡| 深爱激情五月婷婷| 成人性生交大片免费看小说| 一本色道久久| 三级在线观看免费大全| 精品亚洲永久免费精品| 亚洲一区二区免费在线观看|