精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

亚洲美女激情视频| 午夜精品福利久久久| 91久久精品视频| 国产精品99re| 日韩av字幕| 午夜国产精品影院在线观看| 欧美精品亚洲| 国产视频一区二区三区四区五区| 欧美日韩一区二区高清| 日韩激情在线视频| 亚洲精品综合在线观看| 青青青草视频在线| 国产午夜一区二区三区| 成人免费视频网址| 日韩在线视频免费播放| 欧美xxxxx视频| 亚洲国产精品视频在线观看 | 亚洲主播在线| xvideos亚洲| 亚洲国产第一区| 91麻豆精品一二三区在线| 偷偷要91色婷婷| 国产又爽又黄ai换脸| 视频在线观看你懂的| 国产在线精品一区二区三区不卡| 5566成人精品视频免费| 国产一二三区精品| 精品香蕉视频| 日韩av综合网| 老熟女高潮一区二区三区| 一呦二呦三呦精品国产| 亚洲国产乱码最新视频| 欧美一级黄色录像片| 高清国产福利在线观看| 99精品视频在线免费观看| 成人激情黄色网| 日韩精品一区不卡| 99视频精品| 欧美极品xxxx| 日本在线一级片| 日韩在线观看| 亚洲色图五月天| 日韩无码精品一区二区| 午夜视频在线观看精品中文 | 国产91免费看| 国产精品亚洲第一区在线暖暖韩国 | 亚洲黄色在线| 欧美日韩国产成人| 国产高潮流白浆| 亚洲色图二区| 久久久久北条麻妃免费看| 日韩毛片无码永久免费看| 天堂在线精品| 日韩精品在线视频美女| 99久久人妻精品免费二区| 成人性生交大片免费看中文视频 | 日韩久久电影| 中文字幕在线观看亚洲| 国产三级短视频| 第一会所sis001亚洲| 国产午夜精品免费一区二区三区| 中文字幕狠狠干| 青青一区二区| 亚洲欧洲激情在线| 微拍福利一区二区| 成人动漫免费在线观看| 色伦专区97中文字幕| 懂色av粉嫩av蜜臀av一区二区三区| 大片网站久久| 久久国产加勒比精品无码| 欧美国产日韩在线观看成人 | 国产香蕉久久精品综合网| 欧美日韩免费观看一区| 国产精品一二三区视频| 国产精品天美传媒| 操bbb操bbb| 毛片在线导航| 欧美日韩激情网| 久久黄色免费看| 成人久久网站| 欧美一区二区成人6969| www.四虎精品| 亚洲8888| 丝袜亚洲欧美日韩综合| 欧美福利第一页| 91精品一区二区三区综合| 欧美黄色www| 亚洲天堂av片| 麻豆国产精品官网| 91亚色免费| 男人天堂综合| 亚洲欧美偷拍卡通变态| 久久久久免费看黄a片app| 久久人体大尺度| 欧美精品久久99久久在免费线| 国产成人精品一区二区在线小狼| 加勒比色老久久爱综合网| 国产一区二区三区直播精品电影 | 五月婷婷欧美视频| 美女黄色片视频| 亚洲精品v亚洲精品v日韩精品| 亚洲国产高潮在线观看| 国产视频三区四区| 欧美日本一区二区视频在线观看| 欧美最近摘花xxxx摘花| 国产精品无码久久av| av电影在线观看一区| 亚洲免费久久| 亚洲欧美韩国| 日韩一级大片在线| a天堂中文字幕| 激情久久一区| 成人久久一区二区| 日本一区高清| 亚洲观看高清完整版在线观看| 自拍偷拍21p| 美女福利一区| 欧美成人高清视频| 中文在线免费看视频| 99久久亚洲一区二区三区青草| 中文字幕日韩一区二区三区不卡 | 国产精品自产拍在线观| 婷婷色在线视频| 亚洲男人的天堂网| 日韩一级理论片| 欧美激情99| 欧美国产精品日韩| 91免费视频播放| 国产欧美一区二区三区在线看蜜臀 | 丰满人妻一区二区三区免费视频棣| 欧美亚洲国产激情| 欧美尤物巨大精品爽| 亚洲精品字幕在线| 亚洲欧美色图小说| 色婷婷.com| 精品视频免费| 日本久久中文字幕| 亚洲人妻一区二区三区| 亚洲一区二区三区不卡国产欧美 | 国产剧情一区二区在线观看| 一区二区福利视频| 高潮毛片又色又爽免费| 99久久99久久精品免费看蜜桃| 日韩精品在线观看av| 亚洲午夜免费| 欧美黑人xxxx| 亚洲国产www| 亚洲一区欧美一区| 免费黄视频在线观看| 综合激情婷婷| 亚洲一区二区三区四区在线播放| 久操视频在线观看| 欧美高清视频不卡网| 日本美女黄色一级片| 免费成人你懂的| 亚洲精品一品区二品区三品区| 精品视频在线一区二区在线| 一个人www欧美| 天天爽夜夜爽人人爽| 国产日韩精品一区| 亚洲老女人av| 午夜精品毛片| aa成人免费视频| 91九色porn在线资源| 日韩av最新在线观看| 国产在线观看黄色| 国产偷v国产偷v亚洲高清| www.超碰com| 久久精品国产大片免费观看| 91精品久久久久久久久久久久久 | 中文字幕一区二区三| 久久久精品高清| 欧美日韩国产精品一区二区亚洲| 不卡日韩av| 亚洲风情在线资源| 在线精品91av| www.日韩高清| 午夜精品一区二区三区电影天堂| 特级西西人体wwwww| 三级一区在线视频先锋 | 极品中文字幕一区| 久久伦理网站| 成人在线高清| 欧美黑人一级爽快片淫片高清| 青青草在线视频免费观看| 欧美三片在线视频观看| 丝袜美腿小色网| 99国产麻豆精品| 亚洲色图 在线视频| 亚洲欧美文学| 欧美激情第六页| 亚洲国产伊人| 91高清视频免费观看| 日本中文字幕在线2020| 亚洲精品一区二区三区影院| 中国女人真人一级毛片| 亚洲一区视频在线观看视频| 成人无码av片在线观看| 国产999精品久久| 亚欧在线免费观看| 国内综合精品午夜久久资源| 欧美日韩在线一二三| 麻豆精品久久| 国产精品成人久久久久| 日韩123区| 中文字幕亚洲第一| 色窝窝无码一区二区三区成人网站 | 99久久精品费精品国产一区二区| 国产又大又黄又粗又爽| 一本色道88久久加勒比精品| 亚洲欧洲久久| 偷拍一区二区| 99精品99久久久久久宅男| 欧美电影免费观看高清完整| 色综合天天狠天天透天天伊人 | 欧美噜噜久久久xxx| 国产青青草在线| 亚洲第一精品福利| 99免费在线视频| 欧美视频你懂的| 久久精品一二区| 亚洲一区中文日韩| 登山的目的在线| 久久久国际精品| 日韩片在线观看| 大美女一区二区三区| 九九热视频免费| 麻豆视频观看网址久久| 成人综合视频在线| 一区免费视频| 免费的一级黄色片| 亚州av乱码久久精品蜜桃| 日韩精品一区二区三区丰满| 亚洲丝袜啪啪| 国产一区二区三区黄| 日韩欧美中文在线观看| 国产免费亚洲高清| 日本美女久久| 国产精品久久久久久久美男| 欧美momandson| 欧美一区三区三区高中清蜜桃| 成年人国产在线观看| 欧美另类交人妖| a级影片在线观看| 久久久国产精彩视频美女艺术照福利| 成年在线电影| 一区二区三区天堂av| chinese偷拍一区二区三区| 亚洲人成人99网站| 韩国福利在线| 一区二区三区视频免费在线观看| 国产福利小视频在线| 一区二区三欧美| 欧美猛烈性xbxbxbxb| 中文字幕欧美专区| 男人在线资源站| 欧美成人免费va影院高清| 爆操欧美美女| 久久99久久99精品中文字幕| 免费网站在线观看人| 午夜精品一区二区三区在线视频 | 亚洲国产综合在线| 在线免费观看毛片| 欧美日韩中国免费专区在线看| 圆产精品久久久久久久久久久| 狠狠久久亚洲欧美专区| 无码人妻久久一区二区三区不卡| 欧美在线免费观看视频| 一级黄色片在线观看| 日韩一区二区视频| 男人天堂网在线视频| 亚洲精品一二区| 3p在线观看| 欧美精品中文字幕一区| 91资源在线观看| 欧美中文字幕视频| 国产精品第一国产精品| 99re视频在线播放| 无码日韩精品一区二区免费| 色狠狠久久av五月综合| 亚洲综合自拍| 九色在线视频观看| 麻豆国产精品777777在线| 亚洲成人激情小说| 99久久精品情趣| 国产aaaaaaaaa| 亚洲国产精品人人做人人爽| 欧美一区二区三区久久久| 91精品一区二区三区久久久久久| 蜜臀av免费在线观看| 国产亚洲精品日韩| 羞羞视频在线免费国产| 日韩美女视频中文字幕| 亚洲一区二区av| 久久66热这里只有精品| 欧美高清在线| 日本福利视频在线| 国产综合成人久久大片91| 国产精品嫩草av| 中文字幕在线视频一区| 日本在线观看视频网站| 欧美精品乱码久久久久久按摩| 午夜影院免费体验区| 久久精品视频在线观看| 亚洲同志男男gay1069网站| 成人国产精品一区二区| 日韩在线你懂的| 伊人再见免费在线观看高清版 | 国产综合视频在线| 伊人av综合网| 欧美办公室脚交xxxx| 91免费福利视频| 精品盗摄女厕tp美女嘘嘘| 国产毛片久久久久久国产毛片| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩成人av影院| 亚洲少妇最新在线视频| 欧美成人一区二区三区四区| 精品国产一区二区在线观看| 欧美jizzhd69巨大| 国产精品扒开腿做| 青青草久久爱| 18禁裸男晨勃露j毛免费观看| 九九热在线视频观看这里只有精品| 欧美bbbbb性bbbbb视频| 一区二区三区四区不卡视频| 91成年人视频| 在线激情影院一区| 欧亚一区二区| 欧美日韩免费高清| 香蕉久久国产| 国产黄色三级网站| 亚洲福利视频三区| www久久久久久| 欧美成人精品激情在线观看| 国产精品99久久免费| 在线日韩av永久免费观看| 日本不卡视频一二三区| 国产一二三四五区| 欧美视频在线视频| 深夜福利在线观看直播| 97视频在线观看播放| 精品视频高潮| 国产不卡一区二区视频| 成人午夜av电影| 国产精品第二十页| 精品国产污污免费网站入口| 欧美xxxx少妇| 国产精品有限公司| 亚洲国产精品一区制服丝袜| 亚洲图片欧美另类| 天天色天天爱天天射综合| 日韩一区av| 国产精品99久久久久久白浆小说 | 成人爽a毛片一区二区免费| 国产盗摄x88av| 精品久久久久久久一区二区蜜臀| 天堂av最新在线| 国产伦理一区二区三区| 9色国产精品| 亚洲性猛交xxxx乱大交| 欧美专区日韩专区| 米奇精品一区二区三区| 亚洲一区二区自拍| 激情国产一区| 亚洲精品国产一区黑色丝袜| 欧美在线观看一区| 久久五月精品| 国产不卡一区二区在线观看| 亚洲性视频h| 亚洲第一成人网站 | 国产福利视频导航| 久久理论片午夜琪琪电影网| 天美av一区二区三区久久| 成人性生生活性生交12| 亚洲色图20p| 日本免费不卡视频| 国产精品高清网站| 66视频精品| 一起草在线视频| 欧美性一级生活| 在线三级中文| 欧美伦理一区二区| 国模娜娜一区二区三区| 国产无套内射又大又猛又粗又爽| 精品视频一区在线视频| 国产精品伦一区二区| 久久人人爽人人爽人人av| 国产肉丝袜一区二区| 国产女人18毛片18精品| 97婷婷大伊香蕉精品视频| 日本不卡高清| 一二三区视频在线观看| 91激情五月电影| 日韩123区| 亚洲激情一区二区三区| 成人午夜短视频| 中文字幕在线日亚洲9| 欧美精品电影免费在线观看| jizzjizz欧美69巨大|