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

統一緩存帝國 - 實戰 Spring Cache

存儲 存儲軟件
Spring Cache 是 Spring 提供的一整套的緩存解決方案。雖然它本身并沒有提供緩存的實現,但是它提供了一整套的接口和代碼規范、配置、注解等,這樣它就可以整合各種緩存方案了,比如 Redis、Ehcache,我們也就不用關心操作緩存的細節。

[[408163]]

一、揭開 Spring Cache 的面紗

1.1 現有緩存方案的痛點

試想一種場景:

1.用戶 A 打開 APP,進入到了秒殺商品的詳情頁,那這個商品數據我們會先去數據庫查詢,然后返回給客戶端。

2.因為有大量用戶短時間內進入到了詳情頁,所以可以把活動列表緩存起來,直接讀緩存就可以了。

3.那下次再查詢商品時,直接去緩存查詢就可以了。如果秒殺商品下架了,緩存的數據不會用到了,就把緩存刪掉就可以了。

4.上面幾步看起來也沒啥問題,但是放緩存,刪除緩存這兩步是需要我們去手動寫代碼實現的。有沒有一種方式不用寫操作緩存的代碼?

5.假如現在用的緩存中間件是 Redis,領導說要換成 Ehcache,操作緩存的代碼是不是又得重新擼一遍?

總結下上面場景的痛點:

需要手寫操作緩存代碼,如添加緩存、更新緩存、刪除緩存。

切換緩存組件并不容易,或者說沒有對緩存層進行抽象封裝,依賴具體的緩存中間件。

哪有沒有一種方案可以幫助解決上面的兩個痛點呢?

這就是今天要介紹的 Spring Cache。

1.2 Spring Cache 介紹

Spring Cache 是 Spring 提供的一整套的緩存解決方案。雖然它本身并沒有提供緩存的實現,但是它提供了一整套的接口和代碼規范、配置、注解等,這樣它就可以整合各種緩存方案了,比如 Redis、Ehcache,我們也就不用關心操作緩存的細節。

Spring 3.1 開始定義了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口來統一不同的緩存技術,并支持使用注解來簡化我們開發。

Cache 接口它包含了緩存的各種操作方式,同時還提供了各種xxxCache緩存的實現,比如 RedisCache 針對Redis,EhCacheCache 針對 EhCache,ConcurrentMapCache 針對 ConCurrentMap,具體有哪幾種,后面實戰中會介紹。

1.3 Spring Cache 有什么功效

每次調用某方法,而此方法又是帶有緩存功能時,Spring 框架就會檢查指定參數的那個方法是否已經被調用過,如果之前調用過,就從緩存中取之前調用的結果;如果沒有調用過,則再調用一次這個方法,并緩存結果,然后再返回結果,那下次調用這個方法時,就可以直接從緩存中獲取結果了。

1.4 Spring Cache 的原理是什么?

Spring Cache 主要是作用在類上或者方法上,對類中的方法的返回結果進行緩存。那么如何對方法增強,來實現緩存的功能?

學過 Spring 的同學,肯定能一下子就反應過來,就是用 AOP(面向切面編程)。

面向切面編程可以簡單地理解為在類上或者方法前加一些說明,就是我們常說的注解。

Spring Cache 的注解會幫忙在方法上創建一個切面(aspect),并觸發緩存注解的切點(poinitcut),聽起來太繞了,簡單點說就是:Spring Cache 的注解會幫忙在調用方法之后,去緩存方法調用的最終結果,或者在方法調用之前拿緩存中的結果,或者刪除緩存中的結果,這些讀、寫、刪緩存的臟活都交給 Spring Cache 來做了,是不是很爽,再也不用自己去寫緩存操作的邏輯了。

1.5 緩存注解

Spring 提供了四個注解來聲明緩存規則。@Cacheable,@CachePut,@CacheEvict,@Caching。

大家先有個概念,后面我們再來看怎么使用這些緩存注解。

二、使用緩存

2.1 引入 Spring Cache 依賴

在 pom 文件中引入 spring cache 依賴,如下所示:

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

2.2 配置使用哪種緩存

Spring Cache 支持很多緩存中間件作為框架中的緩存,總共有 9 種選擇:

  • caffeine:Caffeine 是一種高性能的緩存庫,基于 Google Guava。
  • couchbase:CouchBase是一款非關系型JSON文檔數據庫。
  • generic:由泛型機制和 static 組合實現的泛型緩存機制。
  • hazelcast:一個高度可擴展的數據分發和集群平臺,可用于實現分布式數據存儲、數據緩存。
  • infinispan:分布式的集群緩存系統。
  • jcache:JCache 作為緩存。它是 JSR107 規范中提到的緩存規范。
  • none:沒有緩存。
  • redis:用 Redis 作為緩存
  • simple:用內存作為緩存。

mark

我們還是用最熟悉的 Redis 作為緩存吧。配置 Redis 作為緩存也很簡單,在配置文件 application.properties 中設置緩存的類型為 Redis 就可以了, 如下所示:

當然,別忘了還要在 pom 文件中 引入 Redis 的依賴,不然用不了 Redis。

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

2.3 測試緩存

那基礎的配置已經做好了,現在就是看怎么使用 Spring Cache 了。

(1)啟動類上添加 @EnableCaching注解。本文案例就是在 啟動類 PassjavaQuestionApplication 添加 @EnableCaching注解。

(2)指定某方法開啟緩存功能。在方法上添加 @Cacheable 緩存注解就可以了。

@Cacheable 注解中,可以添加四種參數:value,key,condition,unless。首先我們來看下 value 參數。

下面的代碼出于演示作用,用了最簡單的邏輯,test 方法直接返回一個數字,連數據庫查詢都沒有做。不過沒關系,我們主要驗證 Spring Cache 是否對方法的結果進行了緩存。

  1. @RequestMapping("/test"
  2. @Cacheable({"hot"}) 
  3. public int test() { 
  4.     return 222; 

大家注意,@Cacheable 注解中小括號里面還含有大括號,大括號里面還有 “hot” 字符串,這個 hot 字符串你可以把它當作一個緩存的名字,然后將 test 方法返回的結果存到 hot 緩存中。我們也可以用 value="hot" 的方式。

第一次調用 test 方法前,既沒有 hot 緩存,更沒有 test 的結果緩存。

調用 test 方法后,Redis 中就創建出了 hot 緩存了,然后緩存了一個 key,如下圖所示:

第二次調用 test 方法時,就從緩存 hot 中將 test 方法緩存的結果 222 取出來了,為了驗證沒有執行 test 中的方法,大家可以在 test 方法中打下 log 或者斷點。最后的驗證結果肯定是沒有走 test 方法的,而是直接從緩存中獲取的。

那我們再來測試一個方法,方法名改為 test2,且請求路徑也改為 test2 了。

  1. @RequestMapping("/test2"
  2. @Cacheable({"hot"}) 
  3. public int test2() { 
  4.     return 456; 

大家覺得這兩個方法的結果都會緩存嗎?還是只會緩存第一個被調用的方法?

經過測試,執行第一個 test 方法后,再執行 test2 方法,緩存結果一直是 222 不會變。因為他們的 key 都是 默認的 SimpleKey[],所以兩個方法對應的緩存的 key 都叫這個,所以得到的緩存值是一樣的。

(3)加上數據庫查詢的測試。

有的同學可能覺得上面的測試太簡單了,test 方法里面啥都沒做,還緩存啥呢,完全沒必要啊。沒關系,大家的顧慮是對的,我們來加上數據庫查詢,安排~

先說下場景:前端需要查詢某個題目的詳情,正常邏輯是查詢數據庫后返回結果。假定這個查詢操作非常頻繁,我們需要將題目詳情進行緩存。我們先看看常規 Redis 緩存方案:

先從 Redis 緩存中查看緩存中是否有該題目,如果緩存中有,則返回緩存中的題目;如果沒有,就從數據庫中查。查詢出題目后,就用 Redis 存起來,然后返回。這里就要寫操作 Redis 的代碼了:查詢 Redis 緩存、更新 Redis 緩存。

  1. // 查詢緩存,假定該題目詳情緩存的 key=question1 
  2. redisTemplate.opsForValue().get("question1");  
  3. // 更新緩存 
  4. redisTemplate.opsForValue().set("question1", questionEntity); 

那如果用 Spring Cache 注解的話,上面兩行代碼可以直接干掉了。如下所示,加一個 @Cacheable 注解搞定。

  1. @Cacheable({"question""hot"}) 
  2. public QuestionEntity info(Long id) { 
  3.     return getById(id); // 查詢數據庫操作 

其中 question 和 hot 是緩存的名字,我們可以將結果放到不同的緩存中。

結論:

  • 如果沒有指定請求參數,則緩存生成的 key name,是默認自動生成的,叫做 SimpleKey[]。
  • 如果指定了請求參數,則緩存的 key name 就是請求參數,比如上面 info 方法,key 等于我傳入的 id = 1。
  • 緩存中 key 對應的 value 默認使用 JDK 序列化后的數據。
  • value 的過期時間為 -1,表示永不過期。

2.4 自定義配置類

上面保存的緩存數據都是默認設置,我們也可以自己定義配置,如下所示,在配置文件 application.properties 添加如下配置:

  1. # 使用 Redis 作為緩存組件 
  2. spring.cache.type=redis 
  3. # 緩存過期時間為 3600s 
  4. spring.cache.redis.time-to-live=3600000 
  5. # 緩存的鍵的名字前綴 
  6. spring.cache.redis.key-prefix=passjava_ 
  7. # 是否使用緩存前綴 
  8. spring.cache.redis.use-key-prefix=true 
  9. # 是否緩存控制,防止緩存穿透 
  10. spring.cache.redis.cache-null-values=true 

然后需要加一個配置類:MyCacheConfig。可以在我的開源項目 passjava 獲取完整源碼。

  1. RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) { 

2.5 自定義 key

然后我們可以指定 key 的值,可以在 @Cacheable 注解里面加上 key 的值 #root.method.name。這是一種特有的表達式,稱作 SpEL 表達式,這里代表用方法名作為緩存 key 的名字。

  1. @Cacheable(value = {"hot"}, key = "#root.method.name"

接下來就是見證奇跡的時刻,調用 test 方法和 test2 方法,發現有兩個不同的 key,一個是 passjava_test1,另外一個 passjava_test2,它們的 key 就是前綴 passjava_ + 方法名 組成。

SpEL 表達式還有很多其它規則,如下所示:

可以根據項目需要選擇合適的表達式來自定義 key。

2.6 自定義條件

除了設置緩存條目的 key,我們還可以自定義條件來決定是否將緩存功能關閉。這里就要用到@Cacheable 另外兩個屬性:condition 和 unless,它倆的格式還是用 SpEL 表達式。對應的四個屬性總結如下:

代碼示例如下:

  1. @Cacheable(value = "hot", unless = "#result.message.containss('NoCache')"

當放回的結果 message 字段包含有 NoCache 就不會進行緩存。

2.7 更新注解

@CachePut 也是用來更新緩存,和 @Cacheable 非常相似,不同點是 @CachePut 注解的方法始終都會執行,返回值也會也會放到緩存中。通常用在保存的方法上。

保存成功后,可以將 key 設置保存實例的 id。這個怎么做呢?

之前我們說過 key 可以通過 SpEL 表達式來指定,這里就可以搭配 #result.id 來實現。

這里還是用個例子來說明用法:創建題目的方法,返回題目實例,其中包含有題目 id。

  1. @RequestMapping("/create"
  2. @CachePut(value = "hot"key = "#result.id"
  3. public QuestionEntity create(@Valid @RequestBody QuestionEntity question){ 
  4.     return IQuestionService.createQuestion(question); 

保存的 id 是自增的,值為 123,所以緩存中的 key = passjava_123。

2.8 刪除緩存注解

@CacheEvict 注解的方法在調用時不會在緩存中添加任何東西,但是會從從緩存中移除之前的緩存結果。

示例代碼如下:

  1. @RequestMapping("/remove/{id}"
  2. @CacheEvict(value = "hot"
  3. public R remove(@PathVariable("id") Long id){ 
  4.     IQuestionService.removeById(id); 
  5.     return R.ok(); 

刪除條目的 key 與傳遞進來的 id 相同。我測試的時候傳的 id = 123,經過前綴passjava_組裝后就是 passjava_123,所以將之前緩存的 passjava_123 刪除了。重復執行也不會報錯。

注意:@CacheEvict 和 @Cacheable、@CachePut 不同,它能夠應用在返回值為 void 的方法上。

@CacheEvict 還有些屬性可供使用,總結如下:

三、 總結

本文通過傳統使用緩存的方式的痛點引出 Spring 框架中的 Cache 組件。然后詳細介紹了 Spring Cache 組件的用法:

  • 五大注解。@Cacheable、@CachePut、@CacheEvict、@Caching,、@CacheConfig。
  • 如何自定義緩存條目的 key。
  • 如何自定義 Cache 配置。
  • 如何自定義緩存的條件。

當然 Spring Cache 并不是萬能的,緩存一致性問題依舊存在,下一篇,我們再細聊緩存的一致性問題。

本文轉載自微信公眾號「悟空聊架構」,可以通過以下二維碼關注。轉載本文請聯系悟空聊架構公眾號。

 

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

2023-05-05 18:38:33

多級緩存Caffeine開發

2023-10-30 07:56:46

Spring緩存

2017-05-18 14:14:25

過濾器Spring ClouZuul

2017-05-19 15:13:05

過濾器Spring ClouZuul

2017-07-31 15:47:50

Zuul統一處理

2025-08-07 05:00:00

2025-01-23 08:24:36

2025-09-22 00:00:00

2025-09-15 01:55:00

緩存代碼Easy-Cache開發

2009-09-22 10:50:04

Hibernate c

2023-11-09 08:01:41

Spring緩存注解

2021-04-21 21:09:36

緩存系統高可用

2021-07-06 08:59:38

頁緩存PageCache

2022-03-31 09:13:49

Cache緩存高并發

2018-07-14 21:59:57

緩存數據庫數據

2021-12-26 08:08:00

緩存Cache開發

2025-03-26 03:25:00

SpringGuavaCaffeine

2010-09-26 08:46:06

HTML 5Cache Manif

2014-11-04 10:34:27

JavaCache

2022-03-09 18:54:30

HTTP緩存協議cache
點贊
收藏

51CTO技術棧公眾號

√天堂资源地址在线官网| 欧美日韩中文视频| 91欧美精品| ●精品国产综合乱码久久久久| 91免费视频网站| 米仓穗香在线观看| 免费观看黄色一级视频| 免费视频一区| 精品激情国产视频| 一级特级黄色片| 成人黄页网站视频| 亚洲成国产人片在线观看| 国产精品中文在线| 女尊高h男高潮呻吟| 中日韩高清电影网| 成人av在线一区二区三区| 日本欧美国产在线| 久久老司机精品视频| www.久久久久爱免| 亚洲一卡二卡三卡四卡| 色噜噜色狠狠狠狠狠综合色一 | 第三区美女视频在线| 精东粉嫩av免费一区二区三区| 91精品国产精品| 182在线观看视频| 偷拍一区二区| 日韩欧美成人一区二区| 国产精品视频黄色| 国产美女一区视频| 国产综合一区二区| 欧美中文字幕第一页| 永久免费看黄网站| 96sao精品免费视频观看| 欧美性猛交99久久久久99按摩| 欧美少妇一区二区三区| 中文字幕在线视频区| 久久精品人人做人人综合| 国产日产精品一区二区三区四区| 国产精品久久久久精| 久久久久久黄| 57pao国产成人免费| 久久在线视频精品| 在线国产一区二区| 日韩一区二区三区国产| 日本少妇xxxxx| 亚洲调教一区| 91久久精品网| 日韩a在线播放| 毛片在线网址| 亚洲免费在线观看视频| 国产成人精品免费视频大全最热| 一级二级三级视频| 日韩av中文字幕一区二区三区| 欧美在线观看日本一区| 91精品国产乱码在线观看| 日韩成人午夜| 亚洲国产成人久久综合一区| 95视频在线观看| 日韩欧美另类一区二区| 黑人巨大精品欧美一区二区三区| 亚洲国产成人精品无码区99| 电影k8一区二区三区久久| 亚洲精品高清在线观看| 成人国产一区二区三区| 欧美色图天堂| 亚洲图片欧美综合| 久久久久99精品成人片| 51精品在线| 欧美日韩国产一中文字不卡| 国产精品宾馆在线精品酒店| 日韩欧美看国产| 欧美在线观看一区二区| 日本在线一二三区| 国产精品视频首页| 欧美一级欧美一级在线播放| 国产一区二区在线视频播放| 美女91在线看| 在线观看一区二区精品视频| 欧美激情第3页| 日本亚洲视频| 日韩精品视频在线播放| 中字幕一区二区三区乱码| 99久久99久久精品国产片果冰| 美女视频久久黄| 国产在线综合网| 男人的天堂亚洲在线| 国产精品羞羞答答| www五月婷婷| 91蝌蚪porny九色| 亚洲欧美久久久久一区二区三区| av中文字幕在线观看| 久久久久88色偷偷免费| 亚洲午夜精品久久久中文影院av| 99在线视频观看| 欧美日韩国产精品一区二区三区四区| 91香蕉视频导航| 在线一区二区三区视频| 国产亚洲精品久久久久久牛牛| 欧美丰满熟妇bbbbbb| 国产美女诱惑一区二区| 成人免费黄色网| 四虎在线视频免费观看| 国产精品人成在线观看免费| www成人免费| 99热播精品免费| 欧美tk—视频vk| 午夜精产品一区二区在线观看的| 欧美一区在线看| 欧洲美女7788成人免费视频| 国产浮力第一页| 久久精品一二三| 日韩精品一区二区三区四 | 国产经典一区二区| www男人的天堂| 久久99久久99精品免观看软件| 亚洲综合网站在线观看| 91香蕉视频导航| 美女视频免费精品| 久久偷看各类女兵18女厕嘘嘘| 丰满少妇乱子伦精品看片| 毛片一区二区三区| 蜜桃精品久久久久久久免费影院 | 国产精品视频九色porn| 国产一二三区在线播放| av亚洲一区| 日韩乱码在线视频| 久久久久久久久久综合| 久久99精品久久只有精品| 茄子视频成人在线观看 | 亚洲男人的天堂在线视频| 理论片日本一区| 欧美区高清在线| av资源中文在线天堂| 欧美一区二区精品在线| 91无套直看片红桃在线观看| 亚洲综合日韩| 久久国产精品一区二区三区 | 91sa在线看| 亚洲av永久纯肉无码精品动漫| 国产精品伦理在线| 国产福利一区视频| 亚洲另类av| 欧美性受xxx| 日本毛片在线观看| 亚洲五码中文字幕| 精品人妻在线视频| 欧美日韩 国产精品| 91九色在线视频| 久久亚洲天堂| 欧美一区二区三区不卡| 中文国语毛片高清视频| 美女国产一区二区三区| 亚洲欧洲一区二区福利| 国产一区二区三区四区五区3d| 亚洲图片欧美日产| 国产精品高清无码| 激情综合色播五月| 亚洲欧洲一区二区福利| 日韩欧美专区| 欧美成年人在线观看| 国产99视频在线| 亚洲综合男人的天堂| 国产a√精品区二区三区四区| 欧美午夜在线视频| 国产精品免费视频一区二区| h片在线观看视频免费免费| 亚洲精品国产精品久久清纯直播 | 色www亚洲国产阿娇yao| 久久99国产精品久久| 日本福利视频导航| 一区二区三区四区高清视频| 性色av一区二区三区在线观看| 手机在线精品视频| 在线观看av一区| 中日韩一级黄色片| 国产成人免费视频精品含羞草妖精| 精品国产第一页| 丝袜美腿美女被狂躁在线观看| 欧美日本在线观看| 一区二区三区免费在线观看视频| 国产一区导航| 亚洲三区视频| 91精品短视频| 国产成人精品久久| 麻豆影院在线观看| 亚洲精品一区在线观看| 在线观看亚洲黄色| 亚洲精品欧美综合四区| 国产老熟女伦老熟妇露脸| 婷婷电影在线观看| 日韩激情片免费| 最好看的日本字幕mv视频大全| 亚洲欧美日韩久久| 精品国产人妻一区二区三区| 看电视剧不卡顿的网站| 欧美国产综合在线| 精品无人区麻豆乱码久久久| 亚洲综合在线小说| 性欧美超级视频| 久久成人国产精品| 精品视频一二三| 日韩视频免费观看高清完整版| 日本免费在线观看视频| 亚洲激情五月婷婷| 国精产品一区二区三区| 国产精品18久久久久久vr| 国产成人黄色片| 夜间精品视频| 日韩精品久久久免费观看| 久久久123| 亚洲视频综合网| 成人无码一区二区三区| 精品婷婷伊人一区三区三| 天堂资源在线播放| 中文字幕一区二区三区乱码在线| 久久久久麻豆v国产精华液好用吗| 开心九九激情九九欧美日韩精美视频电影| 黄页免费在线观看视频| 婷婷综合在线| 天堂资源在线亚洲视频| 全球av集中精品导航福利| 国外成人在线播放| 欧美成人性生活视频| 亚洲精品综合久久中文字幕| 成人激情四射网| 欧美日韩精品二区第二页| 日韩欧美性视频| 亚洲欧美日韩一区二区| 成人一级片免费看| 久久综合给合久久狠狠狠97色69| 日韩大尺度视频| 久久99在线观看| 无码内射中文字幕岛国片| 国产欧美日韩综合一区在线播放| 日本成人在线不卡| 91精品成人| 一区二区不卡在线| 欧美在线观看视频一区| 欧美日韩电影一区二区| 欧美重口另类| 亚洲自拍偷拍网址| 国产成人视屏| 亚洲在线免费观看| 亚洲色图图片| 成人欧美一区二区三区黑人| 少妇高潮一区二区三区99| 国产精品欧美日韩久久| h1515四虎成人| 国产精品视频一区国模私拍| 精品日本视频| 成人国产精品一区二区| 91精品视频一区二区| 91精品视频播放| 日本在线一区二区三区| 国产精品区一区二区三在线播放| 在线视频亚洲欧美中文| 国产一区二区高清不卡| 琪琪久久久久日韩精品| 久久综合久久综合这里只有精品| 欧美美女啪啪| 日本视频一区二区在线观看| 欧美日韩中字| 一区二区冒白浆视频| 亚洲乱码精品| 成人av在线播放观看| 亚洲国产网站| 一本一生久久a久久精品综合蜜| 日韩理论在线| 一本色道久久99精品综合| 91av精品| a天堂资源在线观看| 午夜综合激情| 爱情岛论坛亚洲首页入口章节| 狠狠爱综合网| 91成人在线观看喷潮教学| 香蕉视频成人在线观看| 高清一区二区视频| 国产在线精品免费| 波多野结衣三级视频| 91视频国产观看| 亚洲精品一区二区三区影院忠贞| 国产精品久久99| 精品少妇久久久久久888优播| 精品毛片网大全| 中文字幕人妻一区二区三区视频 | aaa级黄色片| 日韩av网站在线| 91大神xh98hx在线播放| 久久久久久国产精品美女| 92国产在线视频| 九九视频直播综合网| 欧美videos极品另类| 欧美激情第6页| 日韩欧美精品电影| 91免费版网站在线观看| 亚洲精品456| 色爽爽爽爽爽爽爽爽| 国产日韩欧美| 三年中文在线观看免费大全中国| 成人免费高清视频在线观看| 蜜桃av免费观看| 午夜精品久久久久久久久久| 久久久久久久久久久久久久久久久 | 久久久久综合| 欧美一区二区三区影院| 国产午夜精品理论片a级大结局| 欧美黑人性猛交xxx| 欧美影院午夜播放| 免费a级片在线观看| xxav国产精品美女主播| 国产不卡123| 韩国精品久久久999| jizzyou欧美16| 蜜桃传媒一区二区| 国产综合婷婷| 日韩av.com| 国产欧美精品一区二区三区四区| 在线免费观看黄色小视频| 亚洲欧美日韩国产综合在线| 一级做a爰片久久毛片| 日韩精品一区二区三区老鸭窝| 成人福利在线| 日本中文字幕成人| 精品亚洲免a| 国产在线xxxx| 国产麻豆成人精品| 奇米网一区二区| 在线精品国精品国产尤物884a| 污污视频在线免费看| 欧美激情免费看| 欧美经典一区| 91九色国产ts另类人妖| 精彩视频一区二区| 久久久久人妻一区精品色| 欧美三区在线视频| 第三区美女视频在线| 国产suv精品一区二区| 日韩精品免费一区二区夜夜嗨| 九一国产精品视频| 成人国产在线观看| 久久精品视频日本| 精品久久久久久最新网址| 亚洲国产精品精华素| 亚洲影视九九影院在线观看| 91九色精品| 亚洲无在线观看| 亚洲欧洲日本在线| 国产又大又粗又硬| 久久久国产精彩视频美女艺术照福利 | 福利在线一区二区三区| 久久久99久久精品欧美| 成人免费一级片| 日韩色av导航| 欧美特黄不卡| 日韩精品综合在线| av不卡一区二区三区| av毛片在线免费观看| 一本久久综合亚洲鲁鲁| 国产成人免费精品| 中文字幕中文字幕一区三区| 国产精品一二三区在线| 妺妺窝人体色www聚色窝仙踪| 欧美tk丨vk视频| 日本三级一区| 欧美性天天影院| 蜜桃久久久久久| 欧美日韩免费一区二区| 精品国产91亚洲一区二区三区婷婷 | 欧美网站免费观看| 久久精品网站免费观看| 一级黄色小视频| 欧美富婆性猛交| 香蕉人人精品| 日韩av在线中文| 一区二区三区在线免费播放| 免费看黄色一级视频| 国产99久久久欧美黑人| 国产精品传媒精东影业在线| 国产人妖在线观看| 狠狠操狠狠色综合网| 92国产在线视频| 国产精品一码二码三码在线| 美女91精品| 波多野结衣家庭教师| 亚洲黄色有码视频| 97成人超碰| www.国产在线播放| 久久久久久久久伊人| 国产人妻精品一区二区三区| 91精品国产色综合久久不卡98口| 欧美精品羞羞答答| 男人的天堂免费| 色拍拍在线精品视频8848| 快射视频在线观看| 精品欧美日韩在线| 精品在线一区二区| 成人免费a视频| 久久黄色av网站| 外国成人在线视频| 永久看看免费大片|