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

20 圖|緩存實戰之一

存儲 存儲軟件
20 年前常見的系統就是單機的,比如 ERP 系統,對性能要求不高,使用緩存的并不常見,但現如今,已經步入到互聯網時代,高并發、高可用、高性能總是被提起,而緩存在這“三高”中立下汗馬功勞。

[[394864]]

前言

先說個小事情,今天試了下做動圖,就一張動圖都花了我 1 個小時,還做得很難看。。在線求個做動圖的好軟件

本文主要內容如下:

上一篇講到如何做性能調優的方式:《48 張圖 | 手摸手教你微服務的性能監控、壓測和調優》,比如給表加索引、動靜分離、減少不必要的日志打印。但有一個很強大的優化方式沒有提到,那就是加緩存,比如查詢小程序的廣告位配置,因為沒什么人會去頻繁的改,將廣告位配置丟到緩存里面再適合不過了。那我們就給開源 Spring Cloud 實戰項目 PassJava 加下緩存來提升下性能。

我把后端、前端、小程序都上傳到同一個倉庫里面了,大家可以通過 Github 或 碼云訪問。地址如下:

Github: https://github.com/Jackson0714/PassJava-Platform

碼云:https://gitee.com/jayh2018/PassJava-Platform

配套教程:www.passjava.cn

在實戰之前,我們先來看下使用緩存的原理和問題。

一、緩存

1.1 為什么要用緩存

20 年前常見的系統就是單機的,比如 ERP 系統,對性能要求不高,使用緩存的并不常見,但現如今,已經步入到互聯網時代,高并發、高可用、高性能總是被提起,而緩存在這“三高”中立下汗馬功勞。

我們通過會將部分數據放入緩存中,來提高訪問速度,然后數據庫承擔存儲的工作。

那么哪些數據適合放入緩存中呢?

  • 即時性。例如查詢最新的物流狀態信息。
  • 數據一致性要求不高。例如門店信息,修改后,數據庫中已經改了,5 分鐘后緩存中才是最新的,但不影響功能使用。
  • 訪問量大且更新頻率不高。比如首頁的廣告信息,訪問量,但是不會經常變化。

當我們想要查詢數據時,使用緩存的流程如下:

讀模式緩存使用流程

1.2 本地緩存

比如現在有一個需求:前端小程序需要查詢題目的類型,而題目類型放在小程序的首頁在,訪問量是非常高的,但是又不是經常變化的數據,所以可以將題目類型數據放到緩存中。

最簡單的使用緩存的方式是使用本地緩存,也就是在內存中緩存數據,可以用 HashMap、數組等數據結構來緩存數據。

1.2.1 不使用緩存

我們先來看下不使用緩存的情況:前端的請求先經過網關,然后請求到題目微服務,然后查詢數據庫,返回查詢結果。

再來看下核心代碼是怎么樣的。

先自定義一個 Rest API 用來查詢題目類型列表,數據是從數據庫查詢出來后直接返回給前端。

  1. @RequestMapping("/list"
  2. public R list(){ 
  3.     // 從數據庫中查詢數據 
  4.     typeEntityList = ITypeService.list();  
  5.     return R.ok().put("typeEntityList", typeEntityList); 

1.2.2 使用緩存

來看下使用緩存的情況:前端先經過網關,然后到題目微服務,先判斷緩存中有沒有數據,如果沒有,則查詢數據庫再更新緩存,最后返回查詢到的結果。

那我們現在創建一個 HashMap 來緩存題目的類型列表:

  1. private Map<String, Object> cache = new HashMap<>(); 

先獲取緩存的類型列表

  1. List<TypeEntity> typeEntityListCache = (List<TypeEntity>) cache.get("typeEntityList"); 

如果緩存中沒有,則先從數據庫中獲取。當然,第一次查詢緩存時,肯定是沒有這個數據的。

  1. // 如果緩存中沒有數據 
  2. if (typeEntityListCache == null) { 
  3.   System.out.println("The cache is empty"); 
  4.   // 從數據庫中查詢數據 
  5.   List<TypeEntity> typeEntityList = ITypeService.list(); 
  6.   // 將數據放入緩存中 
  7.   typeEntityListCache = typeEntityList; 
  8.   cache.put("typeEntityList", typeEntityList); 
  9. return R.ok().put("typeEntityList", typeEntityListCache); 

我們用 Postman 工具來看下查詢結果:

  1. 請求URL:https://github.com/Jackson0714/PassJava-Platform 

返回了題目類型列表,共 14 條數據。

以后再次查詢時,因為緩存中已經有該數據了,所以直接走緩存,不會再從數據庫中查詢數據了。

從上面的例子中我們可以知道本地緩存有哪些優點呢?

  • 減少和數據庫的交互,降低因磁盤 I/O 引起的性能問題。
  • 避免數據庫的死鎖問題。
  • 加速相應速度。

當然,本地緩存也存在一些問題:

  • 占用本地內存資源。
  • 機器宕機重啟后,緩存丟失。
  • 可能會存在數據庫數據和緩存數據不一致的問題。
  • 同一臺機器中的多個微服務緩存的數據不一致。

  • 集群環境下存在緩存的數據不一致的問題。

基于本地緩存的問題,我們引入了分布式緩存 Redis 來解決。

二、緩存 Redis

2.1 Docker 安裝 Redis

首先需要安裝 Redis,我是通過 Docker 來安裝 Redis。另外我在 ubuntu 和 Mac M1 上都裝過 docker 版的 Redis,大家可以參照這兩篇來安裝。

《Ubuntu 上到 Docker 安裝redis》

《M1 和 Docker 談了個戀愛...》

2.2 引入 Redis 組件

我用的是 passjava-question 微服務,所以是在 passjava-question 模塊下的配置文件 pom.xml 中引入 redis 組件。

文件路徑:/passjava-question/pom.xml

  1. <dependency> 
  2.     <groupId>org.springframework.boot</groupId> 
  3.     <artifactId>spring-boot-starter-data-redis</artifactId> 
  4. </dependency> 

 

2.3 測試 Redis

我們可以寫一個測試方法來測試引入的 redis 是否能存數據,以及能否查出存的數據。

我們都是使用 StringRedisTemplate 庫來操作 Redis,所以可以自動裝載下 StringRedisTemplate。

  1. @Autowired 
  2. StringRedisTemplate stringRedisTemplate; 

然后在測試方法中,測試存儲方法:ops.set(),以及 查詢方法:ops.get()

  1. @Test 
  2. public void TestStringRedisTemplate() { 
  3.     // 初始化 redis 組件 
  4.     ValueOperations<String, String> ops = stringRedisTemplate.opsForValue(); 
  5.     // 存儲數據 
  6.     ops.set("悟空""悟空聊架構_" + UUID.randomUUID().toString()); 
  7.     // 查詢數據 
  8.     String wukong = ops.get("悟空"); 
  9.     System.out.println(wukong); 

set 方法的第一個參數是 key,比如示例中的 “悟空”。

get 方法的參數也是 key。

最后打印出了 redis 中 key = “悟空” 的緩存的值:

另外也可以通過客戶端工具來查看,如下圖所示:

我下載的是這個軟件:Redis Desktop Manager windows,Mac M1 上正常使用。下載地址:

  1. http://www.pc6.com/softview/SoftView_450180.html 

2.4 用 Redis 改造業務邏輯

用 redis 替換 hashmap 也不難,把用到 hashmap 的地方都用 redis 改下。另外需要注意的是:

從數據庫中查詢到的數據先要序列化成 JSON 字符串后再存入到 Redis 中,從 Redis 中查詢數據時,也需要將 JSON 字符串反序列化為對象實例。

  1. public List<TypeEntity> getTypeEntityList() { 
  2.   // 1.初始化 redis 組件 
  3.   ValueOperations<String, String> ops = stringRedisTemplate.opsForValue(); 
  4.   // 2.從緩存中查詢數據 
  5.   String typeEntityListCache = ops.get("typeEntityList"); 
  6.   // 3.如果緩存中沒有數據 
  7.   if (StringUtils.isEmpty(typeEntityListCache)) { 
  8.     System.out.println("The cache is empty"); 
  9.     // 4.從數據庫中查詢數據 
  10.     List<TypeEntity> typeEntityListFromDb = this.list(); 
  11.     // 5.將從數據庫中查詢出的數據序列化 JSON 字符串 
  12.     typeEntityListCache = JSON.toJSONString(typeEntityListFromDb); 
  13.     // 6.將序列化后的數據存入緩存中 
  14.     ops.set("typeEntityList", typeEntityListCache); 
  15.     return typeEntityListFromDb; 
  16.   } 
  17.   // 7.如果緩存中有數據,則從緩存中拿出來,并反序列化為實例對象 
  18.   List<TypeEntity> typeEntityList = JSON.parseObject(typeEntityListCache, new TypeReference<List<TypeEntity>>(){}); 
  19.   return typeEntityList; 

整個流程如下:

  • 1.初始化 redis 組件。
  • 2.從緩存中查詢數據。
  • 3.如果緩存中沒有數據,執行步驟 4、5、6。
  • 4.從數據庫中查詢數據。
  • 5.將從數據庫中查詢出的數據轉化為 JSON 字符串。
  • 6.將序列化后的數據存入緩存中,并返回數據庫中查詢到的數據。
  • 7.如果緩存中有數據,則從緩存中拿出來,并反序列化為實例對象。

2.5 測試業務邏輯

我們還是用 postman 工具進行測試:

通過多次測試,第一次請求會稍微慢點,后面幾次速度非常快。說明使用緩存后性能有提升。

另外我們用 Redis 客戶端看下結果:

Redis key = typeEntityList,Redis value 是一個 JSON 字符串,里面的內容是題目分類列表。

三、緩存穿透、雪崩、擊穿

高并發下使用緩存會帶來的幾個問題:緩存穿透、雪崩、擊穿。

3.1 緩存穿透

3.1.1 緩存穿透的概念

緩存穿透指一個一定不存在的數據,由于緩存未命中這條數據,就會去查詢數據庫,數據庫也沒有這條數據,所以返回結果是 null。如果每次查詢都走數據庫,則緩存就失去了意義,就像穿透了緩存一樣。

3.1.2 帶來的風險

利用不存在的數據進行攻擊,數據庫壓力增大,最終導致系統崩潰。

3.1.3 解決方案

對結果 null 進行緩存,并加入短暫的過期時間。

3.2 緩存雪崩

3.2.1 緩存雪崩的概念

緩存雪崩是指我們緩存多條數據時,采用了相同的過期時間,比如 00:00:00 過期,如果這個時刻緩存同時失效,而有大量請求進來了,因未緩存數據,所以都去查詢數據庫了,數據庫壓力增大,最終就會導致雪崩。

3.2.2 帶來的風險

嘗試找到大量 key 同時過期的時間,在某時刻進行大量攻擊,數據庫壓力增大,最終導致系統崩潰。

3.2.3 解決方案

在原有的實效時間基礎上增加一個碎擠汁,比如 1-5 分鐘隨機,降低緩存的過期時間的重復率,避免發生緩存集體實效。

3.3 緩存擊穿

3.3.1 緩存擊穿的概念

某個 key 設置了過期時間,但在正好失效的時候,有大量請求進來了,導致請求都到數據庫查詢了。

3.3.2 解決方案

大量并發時,只讓一個請求可以獲取到查詢數據庫的鎖,其他請求需要等待,查到以后釋放鎖,其他請求獲取到鎖后,先查緩存,緩存中有數據,就不用查數據庫。

四、加鎖解決緩存擊穿

怎么處理緩存穿透、雪崩、擊穿的問題呢?

  • 對空結果進行緩存,用來解決緩存穿透問題。
  • 設置過期時間,且加上隨機值進行過期偏移,用來解決緩存雪崩問題。
  • 加鎖,解決緩存擊穿問題。另外需要注意,加鎖對性能會帶來影響。

這里我們來看下用代碼演示如何解決緩存擊穿問題。

我們需要用 synchronized 來進行加鎖。當然這是本地鎖的方式,分布式鎖我們會在下篇講到。

  1. public List<TypeEntity> getTypeEntityListByLock() { 
  2.   synchronized (this) { 
  3.     // 1.從緩存中查詢數據 
  4.     String typeEntityListCache = stringRedisTemplate.opsForValue().get("typeEntityList"); 
  5.     if (!StringUtils.isEmpty(typeEntityListCache)) { 
  6.       // 2.如果緩存中有數據,則從緩存中拿出來,并反序列化為實例對象,并返回結果 
  7.       List<TypeEntity> typeEntityList = JSON.parseObject(typeEntityListCache, new TypeReference<List<TypeEntity>>(){}); 
  8.       return typeEntityList; 
  9.     } 
  10.     // 3.如果緩存中沒有數據,從數據庫中查詢數據 
  11.     System.out.println("The cache is empty"); 
  12.     List<TypeEntity> typeEntityListFromDb = this.list(); 
  13.     // 4.將從數據庫中查詢出的數據序列化 JSON 字符串 
  14.     typeEntityListCache = JSON.toJSONString(typeEntityListFromDb); 
  15.     // 5.將序列化后的數據存入緩存中,并返回數據庫查詢結果 
  16.     stringRedisTemplate.opsForValue().set("typeEntityList", typeEntityListCache, 1, TimeUnit.DAYS); 
  17.     return typeEntityListFromDb; 
  18.   } 

1.從緩存中查詢數據。

2.如果緩存中有數據,則從緩存中拿出來,并反序列化為實例對象,并返回結果。

3.如果緩存中沒有數據,從數據庫中查詢數據。

4.將從數據庫中查詢出的數據序列化 JSON 字符串。

5.將序列化后的數據存入緩存中,并返回數據庫查詢結果。

五、本地鎖的問題

本地鎖只能鎖定當前服務的線程,如下圖所示,部署了多個題目微服務,每個微服務用本地鎖進行加鎖。

本地鎖在一般情況下沒什么問題,但是在某些情況下就會出問題:

比如在高并發情況下用來鎖庫存就有問題了:

1.比如當前總庫存為 100,被緩存在 Redis 中。

2.庫存微服務 A 用本地鎖扣減庫存 1 之后,總庫存為 99。

3.庫存微服務 B 用本地鎖扣減庫存 1 之后,總庫存為 99。

4.那庫存扣減了 2 次后,還是 99,就超賣了 1 個。

 

那如何解決本地加鎖的問題呢?

 

責任編輯:武曉燕 來源: 悟空聊架構
相關推薦

2018-08-07 10:44:50

緩存技術瀏覽器

2021-02-18 22:21:20

ASM服務組件化

2013-05-21 09:47:45

虛擬化存儲虛擬化

2010-01-07 09:44:58

NetIQ

2009-08-03 13:19:07

WindowsServ虛擬化Hyper-V

2012-02-15 10:26:40

JavaJava Socket

2012-05-03 11:21:58

ApacheCXFJava

2013-11-29 10:24:52

Cluster設計資源池

2021-06-29 19:26:29

緩存Spring CachSpring

2021-04-12 09:29:05

緩存穿透Facebook

2021-08-04 06:56:49

HTTP緩存前端

2022-03-09 18:54:30

HTTP緩存協議cache

2018-02-27 10:43:59

2009-05-18 18:08:58

VMware虛擬化服務器

2021-01-08 10:24:32

Python項目基礎

2017-01-20 11:10:58

電信

2015-10-30 15:18:24

2023-11-30 07:45:11

useEffectReact

2021-06-03 19:55:55

MySQ查詢優化

2011-04-11 15:53:40

C++
點贊
收藏

51CTO技術棧公眾號

国产亚洲欧美日韩一区二区| 捆绑变态av一区二区三区| 日韩你懂的在线观看| 五月天激情图片| 国产a级免费视频| 欧美日本三区| 精品亚洲一区二区三区四区五区| 久久福利一区二区| 天天摸天天干天天操| 岳乳丰满一区二区三区| 亚洲女色av| 国产精品国产自产拍高清av | 菠萝蜜视频国产在线播放| 国产成人欧美日韩在线电影| 97视频免费在线观看| 国产jk精品白丝av在线观看| 亚洲久草在线| 亚洲444eee在线观看| 西游记1978| 精品国产亚洲av麻豆| 欧美中文日韩| 美女啪啪无遮挡免费久久网站| 香蕉视频污视频| 男人久久天堂| 亚洲天堂网中文字| 久久久久国产精品视频| 91国内精品久久久| 亚洲精品偷拍| 日韩亚洲综合在线| 免费中文字幕av| 国产精品一区二区三区av| 天天亚洲美女在线视频| 伊人色综合影院| 亚洲 欧美 自拍偷拍| 精品一区二区三区欧美| 2021久久精品国产99国产精品| 免费黄色国产视频| 久久电影在线| 日韩欧美国产麻豆| 三级视频中文字幕| 麻豆mv在线看| 亚洲综合视频在线观看| 欧洲一区二区在线| 色呦呦中文字幕| 国内一区二区在线| 国产精品国内视频| 天天操夜夜操视频| 好吊一区二区三区| 色综合伊人色综合网| 亚洲国产第一区| 亚洲日本va中文字幕| 欧美高清性hdvideosex| 别急慢慢来1978如如2| 91白丝在线| 一区二区三区在线视频观看58| 日本一区视频在线观看免费| 在线观看xxx| 成人深夜福利app| 亚洲最大的免费| 中文字幕自拍偷拍| 日韩av一区二| 日韩免费观看在线观看| 久久久久久久久久久久久av| 伊人成年综合电影网| 操91在线视频| 久久精品日韩无码| 天天影视天天精品| 久久精品国产亚洲| 国产精品精品软件男同| 精品一区二区三区在线| 国产一区二区三区在线观看视频 | 蜜臀av.com| 天天综合视频在线观看| 国产精品网曝门| 日韩亚洲欧美精品| jizz在线观看视频| 国产精品国产成人国产三级 | 亚洲欧美经典视频| 天堂av在线中文| 动漫一区在线| 一区二区三区蜜桃| 中文字幕乱码一区二区三区| 在线免费看av| 亚洲欧洲日韩在线| 国产一级黄色录像片| 日本精品一区二区三区在线播放| 国产亚洲女人久久久久毛片| 日韩视频精品| 久久久久久国产精品免费无遮挡| 亚洲欧美在线观看| 中国丰满熟妇xxxx性| 都市激情国产精品| 色综合色狠狠综合色| 国内自拍视频网| 亚洲伊人伊成久久人综合网| 日韩一区二区精品葵司在线| 一级黄色大片免费看| 欧洲亚洲一区二区三区| 亚洲人成网站777色婷婷| 蜜桃视频最新网址| 精品无人区乱码1区2区3区在线| 中文字幕欧美视频| 国产精品传媒| 亚洲精品视频中文字幕| 波多野结衣一本| 人人狠狠综合久久亚洲婷| 久久精品亚洲国产| 久久国产露脸精品国产| 国产一区二区三区成人欧美日韩在线观看| 88xx成人精品| 怡春院在线视频| 成人免费视频一区| 免费国产一区二区| 欧美极品视频| 亚洲精品亚洲人成人网 | 一区二区久久精品| aiai久久| 最近2019年好看中文字幕视频 | 国产精品久久久久精| 国产.欧美.日韩| 欧美另类视频在线| 国产小视频免费在线网址| 中文字幕亚洲成人| 91免费视频网站在线观看| 在线观看欧美| 亚洲久久久久久久久久| 欧美性猛交xxxxx少妇| 玖玖精品视频| 成人免费看片网址| seseavlu视频在线| 亚洲女与黑人做爰| 亚洲狼人综合干| 女同另类激情重口| 欧美多人乱p欧美4p久久| 久久久久久久亚洲| 99这里都是精品| 在线观看污视频| yy6080久久伦理一区二区| 精品日本一线二线三线不卡| 国产成人精品视频免费| 亚洲免费网址| 国产一区二区不卡视频在线观看| 日p在线观看| 五月激情综合婷婷| av影片在线播放| 天天操夜夜操国产精品| 国产精品日日摸夜夜添夜夜av| 免费看黄色一级视频| 日韩毛片在线免费观看| www.色偷偷.com| 欧美极品在线观看| 欧美在线不卡区| 亚洲av毛片成人精品| 五月天视频一区| 免费看毛片的网站| 国产在线成人| 成人免费看片视频| 1区2区3区在线观看| 色婷婷一区二区三区四区| 亚洲国产精品无码久久久久高潮| 五月精品视频| 国产精品久久久久久久久| 免费在线超碰| 色哟哟国产精品| 性久久久久久久久久| 伊人成年综合电影网| 国产精品露出视频| 久久免费电影| 日韩av资源在线播放| 日本熟伦人妇xxxx| www.色综合.com| 亚洲 高清 成人 动漫| 欧美毛片免费观看| 91成人福利在线| 欧美孕妇性xxxⅹ精品hd| 欧美性猛交xxxx免费看| 久久国产精品影院| 男人与禽猛交狂配| 国产精品人人爽人人做我的可爱| 99久久久精品免费观看国产| 免费网站在线观看人| 精品国产91久久久久久久妲己 | 国产电影一区| 麻豆国产精品va在线观看不卡| aaa国产视频| 亚洲一二三专区| 人妻无码中文久久久久专区| 欧美亚洲三级| 日本高清一区| 国产在视频一区二区三区吞精| 最近中文字幕日韩精品| 99久久亚洲精品日本无码| 一个色在线综合| 91大神免费观看| 国产精品综合色区在线观看| 日本一区二区不卡高清更新| 在线观看精品| 久久精品视频在线观看| 精品久久人妻av中文字幕| 亚洲一区二区高清| 精品少妇一区二区三区免费观| 青青草97国产精品免费观看无弹窗版| 自拍另类欧美| 久久动漫网址| 国产在线久久久| 国产白丝在线观看| 国产亚洲欧美视频| 亚洲国产www| 日本精品视频一区二区三区| 国产午夜精品理论片| 成人一区二区三区在线观看| 能在线观看的av网站| 99久久久久久中文字幕一区| 国内精品久久国产| 欧美高清影院| 欧美孕妇与黑人孕交| 成人免费高清| 国产亚洲精品美女久久久久| 亚洲国产精品成人久久蜜臀| 欧美性猛交xxxx富婆弯腰| 内射一区二区三区| 久久欧美一区二区| 一级片黄色免费| 久久久久久久欧美精品| 佐佐木明希av| 国产毛片一区二区三区| 国产精品久久精品视| 精品成人av| 97福利一区二区| 黄色动漫在线观看| 亚洲免费视频网站| 亚洲风情第一页| 欧美日韩成人综合在线一区二区| 欧美成人精品一区二区免费看片| 国产亚洲va综合人人澡精品 | 免费高清视频在线一区| 欧美激情在线视频二区| 免费黄色电影在线观看| 亚洲视频axxx| 天堂av一区二区三区| 欧美一区二区三区电影| 中文字幕激情视频| 欧美日韩国产限制| 久久综合成人网| 国产精品白丝在线| 人人妻人人藻人人爽欧美一区| 成人综合婷婷国产精品久久免费| 欧美激情国内自拍| 日本麻豆一区二区三区视频| 久草在在线视频| 日韩高清不卡一区| 邪恶网站在线观看| 精品亚洲aⅴ乱码一区二区三区| 亚洲人辣妹窥探嘘嘘| 久久国产精品色| 一区二区久久精品| 国产成人午夜99999| 日韩黄色一区二区| 99久久亚洲一区二区三区青草| 国产黑丝一区二区| 久久久久亚洲蜜桃| 手机av在线不卡| 亚洲免费高清视频在线| 亚洲成人生活片| 亚洲成人在线免费| 黄色片中文字幕| 欧美视频在线观看一区| 蜜桃成人免费视频| av基地在线| 久久久精品国产| segui88久久综合9999| 日本国产欧美一区二区三区| 国产韩日精品| 91av一区二区三区| 天堂资源在线亚洲| 宅男一区二区三区| 国一区二区在线观看| 国产最新免费视频| 蜜芽一区二区三区| 免费观看污网站| 久久精品欧美日韩精品| 婷婷伊人五月天| 偷窥少妇高潮呻吟av久久免费| 国产一级片av| 日韩免费视频一区二区| 日韩欧美在线观看一区二区| 上原亚衣av一区二区三区| 永久免费网站在线| 国产国产精品人在线视| 国产成年精品| 女同一区二区| 综合视频在线| 已婚少妇美妙人妻系列| 国产一区在线精品| 欧美熟妇一区二区| 亚洲免费在线观看| 老熟妇一区二区三区| 欧美一区二区三区啪啪| 狠狠狠综合7777久夜色撩人| 欧美另类在线观看| 欧美国产日韩电影| 国产精品中出一区二区三区| 久久精品播放| 精品久久一二三| 国产呦萝稀缺另类资源| 东方伊人免费在线观看| 亚洲国产欧美一区二区三区丁香婷| 国产美女www爽爽爽| 亚洲第一中文字幕在线观看| 无遮挡的视频在线观看| 日韩美女福利视频| 久久97久久97精品免视看秋霞| 欧美aaa在线观看| 日韩av电影天堂| 久久精品女同亚洲女同13| 亚洲色图欧美激情| 国产精品成人久久久| 日韩精品免费在线| 成人免费图片免费观看| 亚洲精品欧美极品| 天天影视天天精品| 成人性生交免费看| 国产欧美精品在线观看| 天天操中文字幕| 精品国产亚洲在线| 女人天堂av在线播放| 91在线免费观看网站| 久久免费大视频| 一道本视频在线观看| 国产日韩av一区| 六月丁香婷婷综合| 亚洲激情视频网| 久久99亚洲网美利坚合众国| 91丝袜美腿美女视频网站| 久久亚洲国产| 精品久久久99| 国产精品人妖ts系列视频| 色老头一区二区| 亚洲人成网站777色婷婷| 欧美羞羞视频| 日韩色妇久久av| 免费看黄色91| 5566中文字幕| 91精品国产麻豆| av电影免费在线观看| 91嫩草在线| 亚洲小说欧美另类社区| 97中文字幕在线观看| 亚洲午夜一区二区三区| 成人免费公开视频| 午夜精品久久久久久99热软件| 好吊妞国产欧美日韩免费观看网站 | 99热这里只有精品在线观看| 久久久97精品| 久久精品九色| 男女激情免费视频| 91在线云播放| 国产又粗又猛又爽又| 一本大道久久加勒比香蕉 | 国产一区高清视频| 国产精品日本| 天天舔天天操天天干| 欧美精品第1页| 青春草视频在线观看| 久久久久久久免费| 日本不卡123| 在线观看成人毛片| 日韩电影大片中文字幕| 超薄肉色丝袜脚交一区二区| 亚洲一区高清| 国产99久久精品| 中文字幕69页| 久久精品99久久久香蕉| 99热这里只有精品首页| 一本大道熟女人妻中文字幕在线| 国产片一区二区| 99热精品在线播放| 欧美一区二区三区……| 日韩欧美在线中字| 最新av免费在线观看| 亚洲成人资源网| 亚洲一区三区电影在线观看| 国产精品vip| 亚洲色图14p| 在线精品视频免费观看| 美女羞羞视频在线观看| 国产欧美日韩伦理| 日本最新不卡在线| 九九视频免费在线观看| 国产视频在线一区二区| 一级欧美视频| 欧美s码亚洲码精品m码| 国产精品传媒入口麻豆| 刘亦菲久久免费一区二区| 国产成人精品电影久久久| 综合天堂久久久久久久| 微拍福利一区二区| 亚洲精品在线免费播放| 欧美成人高清视频在线观看| 大陆极品少妇内射aaaaa|