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

如何保證緩存和數(shù)據(jù)庫的一致性?

數(shù)據(jù)庫 其他數(shù)據(jù)庫
如果你對這個問題有過研究,應(yīng)該可以發(fā)現(xiàn)這個問題其實(shí)很好回答,如果第一次聽到或者第一次遇到這個問題,估計會有點(diǎn)懵,今天我們來聊聊這個話題。

很多小伙伴在面試的時候,應(yīng)該都遇到過類似的問題,如何確保緩存和數(shù)據(jù)庫的一致性?

如果你對這個問題有過研究,應(yīng)該可以發(fā)現(xiàn)這個問題其實(shí)很好回答,如果第一次聽到或者第一次遇到這個問題,估計會有點(diǎn)懵,今天我們來聊聊這個話題。

1. 問題分析

首先我們來看看為什么會有這個問題!

我們在日常開發(fā)中,為了提高數(shù)據(jù)響應(yīng)速度,可能會將一些熱點(diǎn)數(shù)據(jù)保存在緩存中,這樣就不用每次都去數(shù)據(jù)庫中查詢了,可以有效提高服務(wù)端的響應(yīng)速度,那么目前我們最常使用的緩存就是 Redis 了。

用 Redis 做緩存,并不是一說緩存就是 Redis,還是要結(jié)合業(yè)務(wù)的具體情況,我們可以根據(jù)不同業(yè)務(wù)對數(shù)據(jù)要求的實(shí)時性不同,將數(shù)據(jù)分為三級,以電商項(xiàng)目為例:

  • 第 1 級:訂單數(shù)據(jù)和支付流水?dāng)?shù)據(jù):這兩塊數(shù)據(jù)對實(shí)時性和精確性要求很高,所以一般是不需要添加緩存的,直接操作數(shù)據(jù)庫即可。
  • 第 2 級:用戶相關(guān)數(shù)據(jù):這些數(shù)據(jù)和用戶相關(guān),具有讀多寫少的特征,所以我們使用 redis 進(jìn)行緩存。
  • 第 3 級:支付配置信息:這些數(shù)據(jù)和用戶無關(guān),具有數(shù)據(jù)量小,頻繁讀,幾乎不修改的特征,所以我們使用本地內(nèi)存進(jìn)行緩存。

選中合適的數(shù)據(jù)存入 Redis 之后,接下來,每當(dāng)要讀取數(shù)據(jù)的時候,就先去 Redis 中看看有沒有,如果有就直接返回;如果沒有,則去數(shù)據(jù)庫中讀取,并且將從數(shù)據(jù)庫中讀取到的數(shù)據(jù)緩存到 Redis 中,大致上就是這樣一個流程,讀取數(shù)據(jù)的這個流程實(shí)際上是比較清晰也比較簡單的,沒啥好說的。

然而,當(dāng)數(shù)據(jù)存入緩存之后,如果需要更新的話,往往會來帶另外的問題:

  • 當(dāng)有數(shù)據(jù)需要更新的時候,先更新緩存還是先更新數(shù)據(jù)庫?如何確保更新緩存和更新數(shù)據(jù)庫這兩個操作的原子性?
  • 更新緩存的時候該怎么更新?修改還是刪除?

怎么辦?正常來說,我們有四種方案:

  • 先更新緩存,再更新數(shù)據(jù)庫。
  • 先更新數(shù)據(jù)庫,再更新緩存。
  • 先淘汰緩存,再更新數(shù)據(jù)庫。
  • 先更新數(shù)據(jù)庫,再淘汰緩存。

到底使用哪種?

在回答這個問題之前,我們不妨先來看看三個經(jīng)典的緩存模式:

  • Cache-Aside
  • Read-Through/Write through
  • Write Behind

2. Cache-Aside

Cache-Aside,中文也叫旁路緩存模式,如果我們能夠在項(xiàng)目中采用 Cache-Aside,那么就能夠盡可能的解決緩存與數(shù)據(jù)庫數(shù)據(jù)不一致的問題,注意是盡可能的解決,并無法做到絕對解決。

Cache-Aside 又分為讀緩存和寫緩存兩種情況,我們分別來看。

2.1 讀緩存

先來看一張流程圖:

它的流程是這樣:

  • 讀取數(shù)據(jù)。
  • 檢查緩存中是否有需要的數(shù)據(jù),如果命中緩存(Cache Hit),則直接返回數(shù)據(jù)。
  • 如果沒有命中緩存,即 Cache Miss,那么就先去訪問數(shù)據(jù)庫。
  • 將從數(shù)據(jù)庫中讀取到的數(shù)據(jù)設(shè)置到緩存中。
  • 返回數(shù)據(jù)。

這是 Cache-Aside 的讀緩存流程。

其實(shí)對于讀緩存的流程而言,大家一般都沒什么異議,有異議的主要是寫流程,我們繼續(xù)來看。

2.2 寫緩存

先來看一張流程圖:

這個寫緩存的流程就比較簡單,先更新數(shù)據(jù)庫中的數(shù)據(jù),然后刪除舊的緩存即可。

流程雖然簡單,但是卻引伸出來兩個問題:

  • 為什么是刪除舊緩存而不是更新舊緩存?
  • 為什么不先刪除舊的緩存,然后再更新數(shù)據(jù)庫?

我們來分別回答這兩個問題。

為什么是刪除舊緩存而不是更新舊緩存?

  • 更新緩存,說著容易做起來并不容易。很多時候我們更新緩存并不是簡簡單單更新一個 Bean。很多時候,我們緩存的都是一些復(fù)雜操作或者計算(例如大量聯(lián)表操作、一些分組計算)的結(jié)果,如果不加緩存,不但無法滿足高并發(fā)量,同時也會給 MySQL 數(shù)據(jù)庫帶來巨大的負(fù)擔(dān)。那么對于這樣的緩存,更新起來實(shí)際上并不容易,此時選擇刪除緩存效果會更好一些。
  • 對于一些寫頻繁的應(yīng)用,如果按照更新緩存->更新數(shù)據(jù)庫的模式來,比較浪費(fèi)性能,因?yàn)槭紫葘懢彺婧苈闊浯蚊看味家獙懢彺妫强赡軐懥耸危蛔x了一次,讀的時候讀到的緩存數(shù)據(jù)是第十次的,前面九次寫緩存都是無效的,對于這種情況不如采取先寫數(shù)據(jù)庫再刪除緩存的策略。
  • 在多線程環(huán)境下,這樣的更新策略還有可能會導(dǎo)致數(shù)據(jù)邏輯錯誤,來看如下一張流程圖:

可以看到,有兩個并發(fā)的線程 A 和 B:

  • 首先 A 線程更新了數(shù)據(jù)庫。
  • 接下來 B 線程更新了數(shù)據(jù)庫。
  • 由于網(wǎng)絡(luò)等原因,B 線程先更新了緩存。
  • A 線程更新了緩存。

那么此時,緩存中保存的數(shù)據(jù)就是不正確的,而如果采用了刪除緩存的方式,就不會發(fā)生這種問題了。

為什么不先刪除舊的緩存,然后再更新數(shù)據(jù)庫?

這個也是考慮到并發(fā)請求,假設(shè)我們先刪除舊的緩存,然后再更新數(shù)據(jù)庫,那么就有可能出現(xiàn)如下這種情況:

這個操作是這樣的,有兩個線程,A 和 B,其中 A 寫數(shù)據(jù),B 讀數(shù)據(jù),具體流程如下:

  1. A 線程首先刪除緩存。
  2. B 線程讀取緩存,發(fā)現(xiàn)緩存中沒有數(shù)據(jù)。
  3. B 線程讀取數(shù)據(jù)庫。
  4. B 線程將從數(shù)據(jù)庫中讀取到的數(shù)據(jù)寫入緩存。
  5. A 線程更新數(shù)據(jù)庫。

一套操作下來,我們發(fā)現(xiàn)數(shù)據(jù)庫和緩存中的數(shù)據(jù)不一致了!所以,在 Cache-Aside 中是先更新數(shù)據(jù)庫,再刪除緩存。

2.3 延遲雙刪

其實(shí)無論是先更新數(shù)據(jù)庫再刪除緩存,還是先刪除緩存再更新數(shù)據(jù)庫,在并發(fā)環(huán)境下都有可能存在問題:

假設(shè)有 A、B 兩個并發(fā)請求:

  • 先更新數(shù)據(jù)庫再刪除緩存:當(dāng)請求 A 更新數(shù)據(jù)庫之后,還未來得及進(jìn)行緩存清除,此時請求 B 查詢到并使用了 Cache 中的舊數(shù)據(jù)。
  • 先刪除緩存再更新數(shù)據(jù)庫:當(dāng)請求 A 執(zhí)行清除緩存后,還未進(jìn)行數(shù)據(jù)庫更新,此時請求 B 進(jìn)行查詢,查到了舊數(shù)據(jù)并寫入了 Cache。

當(dāng)然我們前面已經(jīng)分析過了,盡量先操作數(shù)據(jù)庫再操作緩存,但是即使這樣也還是有可能存在問題,解決問題的辦法就是延遲雙刪。

延遲雙刪是這樣:先執(zhí)行緩存清除操作,再執(zhí)行數(shù)據(jù)庫更新操作,延遲 N 秒之后再執(zhí)行一次緩存清除操作,這樣就不用擔(dān)心緩存中的數(shù)據(jù)和數(shù)據(jù)庫中的數(shù)據(jù)不一致了。

那么這個延遲 N 秒,N 是多大比較合適呢?一般來說,N 要大于一次寫操作的時間,如果延遲時間小于寫入緩存的時間,會導(dǎo)致請求 A 已經(jīng)延遲清除了緩存,但是此時請求 B 緩存還未寫入,具體是多少,就要結(jié)合自己的業(yè)務(wù)來統(tǒng)計這個數(shù)值了。

2.4 如何確保原子性

但是更新數(shù)據(jù)庫和刪除緩存畢竟不是一個原子操作,要是數(shù)據(jù)庫更新完畢后,刪除緩存失敗了咋辦?

對于這種情況,一種常見的解決方案就是使用消息中間件來實(shí)現(xiàn)刪除的重試。大家知道,MQ 一般都自帶消費(fèi)失敗重試的機(jī)制,當(dāng)我們要刪除緩存的時候,就往 MQ 中扔一條消息,緩存服務(wù)讀取該消息并嘗試刪除緩存,刪除失敗了就會自動重試。如果小伙伴們還不懂 RabbitMQ 的使用,可以在公眾號江南一點(diǎn)雨后臺回復(fù) rabbitmq,有免費(fèi)的視頻+文檔。

3. Read-Through/Write-Through

這種緩存操作模式,松哥印象最深的是在 Oracle Coherence 中有應(yīng)用,不知道小伙伴們有沒有用過 Oracle Coherence,這是一個內(nèi)存數(shù)據(jù)網(wǎng)格,通過這個,應(yīng)用開發(fā)人員和管理人員可快速訪問鍵值數(shù)據(jù),Coherence 可提供集群式低延遲數(shù)據(jù)存儲、多語言網(wǎng)格計算和異步事件流處理,從而為客戶企業(yè)應(yīng)用賦予超高水平的可擴(kuò)展性和性能。

Oracle Coherence 我們就不討論了,我們就來說說 Read-Through。

3.1 Read-Through

這里為了省事,我就不自己畫圖了,網(wǎng)上找了一張圖片,如下:

乍一看,很多人感覺這和 Cache-Aside 一樣呀,沒啥區(qū)別!是的,單看流程是不太容易看到區(qū)別。

Read-Through 是一種類似于 Cache-Aside 的緩存方法,區(qū)別在于,在 Cache-Aside 中,由應(yīng)用程序決定去讀取緩存還是讀取數(shù)據(jù)庫,這樣就會導(dǎo)致應(yīng)用程序中出現(xiàn)了很多業(yè)務(wù)無關(guān)的代碼;而在 Read-Through 中,相當(dāng)于多出來了一個中間層 Cache Middleware,由它去讀取緩存或者數(shù)據(jù)庫,應(yīng)用層的代碼得到了簡化,松哥之前寫過 Spring Cache 的用法,大家回憶下 Spring Cache 中的 @Cacheable 注解,感覺像不像 Read-Through?

我畫一個簡單的流程圖大家來看下:

可以看到,和 Cache-Aside 相比,其實(shí)就相當(dāng)于是多了一個 Cache Middleware,這樣我們在應(yīng)用程序中就只需要正常的讀寫數(shù)據(jù)就行了,并不用管底層的具體邏輯,相當(dāng)于把緩存相關(guān)的代碼從應(yīng)用程序中剝離出來了,應(yīng)用程序只需要專注于業(yè)務(wù)就行了。

3.2 Write-Through

Write-Through 其實(shí)也是差不多,所有的操作都交給 Cache Middleware 來完成,應(yīng)用程序中就是一句簡單的更新就行了,我們來看看流程:

在 Write-Through 策略中,所有的寫操作都經(jīng)過 Cache Middleware,每次寫入時,Cache Middleware 會將數(shù)據(jù)存儲在 DB 和 Cache 中,這兩個操作發(fā)生在一個事務(wù)中,因此,只有兩個都寫入成功,一切才會成功。

這種寫數(shù)據(jù)的優(yōu)勢在于,應(yīng)用程序只與 Cache Middleware 對話,所以它的代碼更加干凈和簡單。

4. Write Behind

Write-Behind 緩存策略類似于 Write-Through 緩存,應(yīng)用程序僅與 Cache Middleware 通信,Cache Middleware 會預(yù)留一個與應(yīng)用程序通信的接口。

Write-Behind 與 Write-Through 最大的區(qū)別在于,前者是數(shù)據(jù)首先寫入緩存,一段時間后(或通過其他觸發(fā)器)再將數(shù)據(jù)寫入 Database,并且這里涉及到的寫入是一個異步操作。這種方式下,Cache 和 DB 數(shù)據(jù)的一致性不強(qiáng),對一致性要求高的系統(tǒng)要謹(jǐn)慎使用,如果有人在數(shù)據(jù)尚未寫入數(shù)據(jù)源的情況下直接從數(shù)據(jù)源獲取數(shù)據(jù),則可能導(dǎo)致獲取過期數(shù)據(jù),不過對于頻繁寫入的場景,這個其實(shí)非常適用。

將數(shù)據(jù)寫入 DB 可以通過多種方式完成:

  • 一種是收集所有寫入操作,然后在某個時間點(diǎn)(例如,當(dāng) DB 負(fù)載較低時)對數(shù)據(jù)源進(jìn)行批量寫入。
  • 另一種方法是將寫入合并成更小的批次,例如每次收集五個寫入操作,然后對數(shù)據(jù)源進(jìn)行批量寫入。

這個流程圖就不想畫了,在網(wǎng)上找了一張,小伙伴們參考下:

參考資料:

https://www.jianshu.com/p/a8eb1412471f

https://catsincode.com/caching-strategy/

責(zé)任編輯:武曉燕 來源: 江南一點(diǎn)雨
相關(guān)推薦

2024-10-28 12:41:25

2021-12-01 08:26:27

數(shù)據(jù)庫緩存技術(shù)

2022-03-31 08:21:14

數(shù)據(jù)庫緩存雙寫數(shù)據(jù)一致性

2022-04-01 16:55:22

數(shù)據(jù)庫緩存日志

2020-09-03 09:45:38

緩存數(shù)據(jù)庫分布式

2022-12-05 08:24:32

mongodb數(shù)據(jù)庫數(shù)據(jù)

2024-12-26 15:01:29

2020-06-01 22:09:48

緩存緩存同步緩存誤用

2025-04-27 08:52:21

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

2022-02-23 09:17:09

數(shù)據(jù)庫分離變更

2019-08-30 12:46:10

并發(fā)扣款查詢SQL

2025-03-27 08:20:54

2021-06-11 09:21:58

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

2024-01-15 10:38:20

多級緩存數(shù)據(jù)一致性分布式緩存

2022-10-19 12:22:53

并發(fā)扣款一致性

2023-09-07 08:11:24

Redis管道機(jī)制

2021-03-04 06:49:53

RocketMQ事務(wù)

2022-12-14 08:23:30

2022-07-25 09:48:22

緩存數(shù)據(jù)服務(wù)

2020-08-05 08:46:10

NFS網(wǎng)絡(luò)文件系統(tǒng)
點(diǎn)贊
收藏

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

毛片激情在线观看| 国产香蕉在线视频| 国产精品xnxxcom| 亚洲一二三区不卡| 久久综合福利| 一级爱爱免费视频| 日韩午夜免费视频| 深夜福利一区二区| 国产精品无码自拍| 日韩大片欧美大片| 一区二区三区四区亚洲| 欧美日韩精品不卡| www.久久久久久| 三级欧美韩日大片在线看| 久久天天躁夜夜躁狠狠躁2022| 精品一区二区三区自拍图片区| 非洲一级黄色片| 国产视频一区二区在线播放| 亚洲最新在线观看| 视频二区一区| 午夜小视频免费| 国产一区二区毛片| 国产国语刺激对白av不卡| 欧美日韩一级在线观看| 欧美综合一区| 亚洲精品中文字| 一级全黄裸体片| 日韩欧国产精品一区综合无码| 国产情人综合久久777777| 成人自拍爱视频| 一二区在线观看| 天堂资源在线中文精品| 久久免费视频在线| 九九热只有精品| 久久久久久久久久久久久久久久久久| 在线视频欧美区| 阿v天堂2017| 色婷婷av在线| 中文字幕在线观看一区| 日韩国产高清一区| 青春草在线观看| 99久久精品国产导航| 动漫一区二区在线| www.久久成人| 成人免费的视频| 国产超碰91| www.99视频| 国产不卡在线视频| 999精品在线观看| www.国产精品视频| 成人在线一区二区三区| av成人综合网| 男人天堂av网| bt欧美亚洲午夜电影天堂| 国产日韩久久| 亚洲av片在线观看| 久久一区二区三区四区| 噜噜噜噜噜久久久久久91| 姝姝窝人体www聚色窝| 成人国产精品免费网站| 国语精品中文字幕| 香蕉视频网站在线| 国产亚洲欧美中文| 日日噜噜噜噜夜夜爽亚洲精品| 国产精品久久综合青草亚洲AV| 国产精品草草| 欧美国产日韩在线| 日韩特黄一级片| 国产亚洲午夜| 国产精品国产三级国产aⅴ9色| 成人观看免费视频| 国产综合精品一区| 2025国产精品视频| 天天干天天插天天射| 国产sm主人调教女m视频| 1313精品午夜理伦电影| 精品国产乱码久久久久久图片| 美女av免费观看| 91超碰免费在线| 色综合中文字幕| 日韩在线第三页| 国产精品一区三区在线观看| 日韩精品一区二区三区在线观看| 亚洲免费一级视频| 精品国产不卡一区二区| 亚洲精品一区二区三区99| 99re这里只有| 日韩www.| 97视频免费观看| 中文字幕自拍偷拍| 国产成人av电影| 奇米视频888战线精品播放| 成人video亚洲精品| 精品毛片三在线观看| 老司机久久精品| 久久夜色电影| 日韩视频精品在线| 好吊操这里只有精品| 男人的天堂久久精品| 成人看片在线| 中文字幕在线免费| 午夜精品123| 加勒比av中文字幕| 亚洲人成网亚洲欧洲无码| 日韩亚洲一区二区| www.伊人久久| 国产不卡免费视频| 在线看成人av电影| 成人国产二区| 精品少妇一区二区| 啪啪一区二区三区| 日韩在线观看一区二区| 国产aⅴ精品一区二区三区黄| 亚洲欧美另类视频| 国产精品三级av| 国产免费观看高清视频| 精品国产三级| 少妇高潮久久77777| 天堂网中文字幕| 成人黄色综合网站| 日本三日本三级少妇三级66| 欧美色网在线| 国产视频久久网| 久久精品视频久久| 国产成都精品91一区二区三| 亚洲国产精品一区在线观看不卡 | 在线看片福利| 欧美日韩的一区二区| 久久精品国产亚洲av麻豆| 国产精品videosex极品| 92国产精品久久久久首页| a视频网址在线观看| 色综合视频在线观看| 你懂的在线观看网站| 国产精品国码视频| 亚洲一区二区三区四区在线播放 | 亚洲欧美日本精品| 国产午夜精品无码一区二区| 国产精品99久久久久久似苏梦涵| 亚洲在线观看视频| 午夜视频成人| 欧美日韩国产不卡| 青青青视频在线播放| 丝袜美腿高跟呻吟高潮一区| 久久久久久久久久久久久9999| 欧美成人免费| 无码av免费一区二区三区试看| 18禁男女爽爽爽午夜网站免费| 日日夜夜天天综合| 亚洲精品电影在线| 日本三级黄色大片| www.色综合.com| 男女视频网站在线观看| 风间由美一区二区av101| 久久久欧美一区二区| 免费看av毛片| 疯狂做受xxxx高潮欧美日本| 美国黄色a级片| 久久免费国产| 亚洲欧美日韩精品在线| 亚洲图片小说区| 色综合视频一区中文字幕| 成人免费视频国产| 欧美性猛xxx| 免费看黄色三级| 精品无人区卡一卡二卡三乱码免费卡| 国产丝袜不卡| 免费日韩电影| 日韩一区二区在线视频| 99国产精品欲| 亚洲h动漫在线| 97超碰在线免费观看| 免费成人在线网站| 欧美在线观看视频免费| 欧美亚洲色图校园春色| 日本久久久久久久久| av在线免费观看网| 日韩一区二区三区免费看| 黄色激情视频在线观看| 国产午夜精品一区二区| 久久久久久久高清| 99热这里只有成人精品国产| 欧美综合激情| 日本免费精品| 欧美又大又粗又长| 女女色综合影院| 欧美mv和日韩mv国产网站| 男人日女人网站| 国产精品久线观看视频| 色婷婷狠狠18禁久久| 美女精品在线观看| eeuss中文| 人妖一区二区三区| 91久久精品国产| 婷婷午夜社区一区| 欧美国产日韩一区二区| 大地资源中文在线观看免费版| 黄色精品一区二区| 日韩亚洲欧美中文字幕| 成人一区二区三区在线观看| 中文字幕第21页| 雨宫琴音一区二区在线| 超碰免费在线公开| 午夜a一级毛片亚洲欧洲| 91亚洲精品久久久| 日韩精品三区| 97精品一区二区三区| 欧美日本高清| 亚洲人精品午夜在线观看| 国产精品视频无码| 日本久久一区二区| 国产成人亚洲精品自产在线| 17c精品麻豆一区二区免费| 亚洲第一黄色网址| 国产福利一区在线| 一本色道久久亚洲综合精品蜜桃| 久久国产精品成人免费观看的软件| 国产精品6699| 色黄视频在线观看| 欧美激情乱人伦| 成人免费观看视频大全| 中文字幕精品在线视频| 亚洲色图欧美视频| 亚洲成人网在线| 不卡av中文字幕| 欧美一区二区在线不卡| 一区二区视频免费观看| 欧洲一区二区三区免费视频| 日韩av大片在线观看| 一区二区高清在线| 日本青青草视频| 亚洲色欲色欲www| 少妇高潮在线观看| 国产精品麻豆欧美日韩ww| xxx在线播放| 久久久久久久久伊人| 青青草成人免费视频| 成人avav影音| 精品国产av色一区二区深夜久久| 久久久夜精品| 日本三区在线观看| 裸体一区二区| 日韩精品xxxx| 老鸭窝91久久精品色噜噜导演| 三区精品视频观看| 日韩精品视频中文字幕| 96sao精品视频在线观看| 一区二区三区日本视频| 成人久久精品视频| 日韩欧美中文字幕一区二区三区 | 成人av观看| 性色av一区二区三区免费| 爱看av在线入口| 91精品91久久久久久| 密臀av在线播放| 91国在线精品国内播放| 校园春色亚洲| 国产精品成人一区二区三区吃奶| 日韩三级免费| 久久99精品久久久久久噜噜| 影音先锋男人在线资源| 久久免费视频观看| av日韩亚洲| 国产日韩在线精品av| 欧美电影在线观看一区| 国产精品传媒毛片三区| 日韩精品丝袜美腿| 日韩福利二区| 亚洲一级毛片| 国产午夜大地久久| 日韩高清在线一区| 三日本三级少妇三级99| 成人午夜电影网站| 性欧美成人播放77777| 国产欧美一区二区三区鸳鸯浴| 无码一区二区精品| 国产色爱av资源综合区| 大吊一区二区三区| 亚洲天堂精品视频| 久久国产精品免费看| 欧美三级电影在线观看| 国产成人av免费看| 亚洲美女激情视频| 国产盗摄在线观看| 97久久久免费福利网址| 久草综合在线| 国产精品区一区二区三在线播放| 精品国产亚洲一区二区三区在线| 青青a在线精品免费观看| 91p九色成人| 国产精品久久久久久久免费大片 | 精品一区二区三区视频日产| 欧美理论电影大全| 国产91沈先生在线播放| 亚洲免费婷婷| 日本成人xxx| 欧美国产精品中文字幕| 精品少妇一二三区| 欧美日韩国产片| 天堂在线观看视频| xxxx欧美18另类的高清| 国产免费不卡| 粉嫩av四季av绯色av第一区| 不卡在线一区| 国产亚洲欧美在线视频| 国产xxx精品视频大全| 亚洲精品国产精品国自| 午夜不卡av免费| 国产不卡av在线播放| 最好看的2019年中文视频| sqte在线播放| 91精品国产综合久久香蕉的用户体验 | 天天综合网天天综合| 精品国产欧美成人夜夜嗨| bbw在线视频| 97netav| 国产精品久久久久无码av| 久久综合久久色| 99re这里只有精品视频首页| 日韩欧美综合视频| 欧美日韩高清不卡| 国产私人尤物无码不卡| 欧美一区二区三区四区在线| 99这里只有精品视频| 一本二本三本亚洲码| 蜜臀av性久久久久蜜臀aⅴ流畅 | 无码日韩精品一区二区| 亚洲成人精品在线| 伊人在我在线看导航| 91精品在线看| 天天色天天射综合网| 亚洲最大成人在线观看| 国产网站一区二区三区| 久久精品五月天| 亚洲欧洲视频在线| 亚洲一区站长工具| 欧美12av| 日韩主播视频在线| 国产精成人品免费观看| 色婷婷av一区二区三区gif| 欧美女v视频| 国产91亚洲精品| 精品视频网站| 黄色永久免费网站| 国产精品久久久久影视| 中文字幕一区二区人妻| 国产亚洲福利一区| 成人在线视频播放| 亚洲国产一区二区在线 | 亚洲激情黄色| 人妻换人妻仑乱| 综合网在线视频| 国产伦子伦对白视频| 久久精品视频在线观看| 国产精一区二区| 91成人在线视频观看| 国产成人小视频| 亚欧洲精品在线视频| 亚洲男人天堂2019| 久久99久久99精品免观看软件| 国产精品久久久久久久免费大片| 杨幂一区二区三区免费看视频| 在线国产伦理一区| 国产黄人亚洲片| 欧美亚韩一区二区三区| 亚洲欧美999| 狂野欧美性猛交xxxx| 制服诱惑一区| 粉嫩嫩av羞羞动漫久久久| 国产做受高潮漫动| 国产一区二区三区在线| 国产一区二区三区视频在线| 91免费国产精品| 久久久久久久久久久久久女国产乱| 色哟哟一一国产精品| 欧美一区二区在线视频| av剧情在线观看| 色之综合天天综合色天天棕色| 国产精品美女久久久| 性高潮久久久久久久| 欧美精品久久久久久久久老牛影院 | 高潮在线视频| 欧洲亚洲一区二区| 国产一区二区三区久久悠悠色av| 成人在线手机视频| 欧美一区二区视频免费观看| 岛国av在线网站| 亚洲看片网站| 丁香亚洲综合激情啪啪综合| 丰满人妻老熟妇伦人精品| 久久久成人的性感天堂| 天天躁日日躁狠狠躁欧美| 中文字幕成人免费视频| 亚洲成人动漫精品| 日韩免费啪啪| 老司机精品福利在线观看| 国产成人在线视频播放| 在线观看一二三区| 97视频国产在线| 欧美日韩岛国|