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

趣說 | 數據庫和緩存如何保證一致性?

數據庫 其他數據庫
「先更新數據庫,再刪緩存」的策略的第一步是更新數據庫,那么更新數據庫成功,就會產生一條變更日志,記錄在 binlog 里。

一天,老板說「最近公司的用戶越來越多了,但是服務器的訪問速度越來越差的,阿旺幫我優化下,做好了給你畫個餅!」。

程序員阿旺聽到老板口中的「畫餅」后就非常期待,沒有任何猶豫就接下了老板給的這個任務。

阿旺登陸到了服務器,經過一番排查后,確認服務器的性能瓶頸是在數據庫。

這好辦,給服務器加上 Redis,讓其作為數據庫的緩存。

這樣,在客戶端請求數據時,如果能在緩存中命中數據,那就查詢緩存,不用在去查詢數據庫,從而減輕數據庫的壓力,提高服務器的性能。

先更新數據庫,還是先更新緩存?

阿旺有了這個想法后,就準備開始著手優化服務器,但是擋在在他前面的是這樣的一個問題。

由于引入了緩存,那么在數據更新時,不僅要更新數據庫,而且要更新緩存,這兩個更新操作存在前后的問題:

  • 先更新數據庫,再更新緩存;
  • 先更新緩存,再更新數據庫;

阿旺沒想到太多,他覺得最新的數據肯定要先更新數據庫,這樣才可以確保數據庫里的數據是最新的,于是他就采用了「先更新數據庫,再更新緩存」的方案。

阿旺經過幾個夜晚的折騰,終于「優化好了服務器」,然后就直接上線了,自信心滿滿跑去跟老板匯報。

老板不懂技術,自然也沒多慮,就讓后續阿旺觀察下服務器的情況,如果效果不錯,就跟阿旺談畫餅的事情。

阿旺觀察了好幾天,發現數據庫的壓力大大減少了,訪問速度也提高了不少,心想這事肯定成的了。

好景不長,突然老板收到一個客戶的投訴,客戶說他剛發起了兩次更新年齡的操作,但是顯示的年齡確還是第一次更新時的年齡,而第二次更新年齡并沒有生效。

老板立馬就找了阿旺,訓斥著阿旺說:「這么簡單的更新操作,都有 bug?我臉往哪兒放?你的餅還要不要了?」

聽到自己準備到手的餅要沒了的阿旺瞬間就慌了,立馬登陸服務器排查問題,阿旺查詢緩存和數據庫的數據后發現了問題。

數據庫的數據是客戶第二次更新操作的數據,而緩存確還是第一次更新操作的數據,也就是出現了數據庫和緩存的數據不一致的問題。

這個問題可大了,阿旺經過一輪的分析,造成緩存和數據庫的數據不一致的現象,是因為并發問題!

先更新數據庫,再更新緩存

舉個例子,比如「請求 A 」和「請求 B 」兩個請求,同時更新「同一條」數據,則可能出現這樣的順序:

A 請求先將數據庫的數據更新為 1,然后在更新緩存前,請求 B 將數據庫的數據更新為 2,緊接著也把緩存更新為 2,然后 A 請求更新緩存為 1。

此時,數據庫中的數據是 2,而緩存中的數據卻是 1,出現了緩存和數據庫中的數據不一致的現象。

先更新緩存,再更新數據庫

那換成「先更新緩存,再更新數據庫」這個方案,還會有問題嗎?

依然還是存在并發的問題,分析思路也是一樣。

假設「請求 A 」和「請求 B 」兩個請求,同時更新「同一條」數據,則可能出現這樣的順序:

A 請求先將緩存的數據更新為 1,然后在更新數據庫前,B 請求來了, 將緩存的數據更新為 2,緊接著把數據庫更新為 2,然后 A 請求將數據庫的數據更新為 1。

此時,數據庫中的數據是 1,而緩存中的數據卻是 2,出現了緩存和數據庫中的數據不一致的現象。

所以,無論是「先更新數據庫,再更新緩存」,還是「先更新緩存,再更新數據庫」,這兩個方案都存在并發問題,當兩個請求并發更新同一條數據的時候,可能會出現緩存和數據庫中的數據不一致的現象。

先更新數據庫,還是先刪除緩存?

阿旺定位出問題后,思考了一番后,決定在更新數據時,不更新緩存,而是刪除緩存中的數據。然后,到讀取數據時,發現緩存中沒了數據之后,再從數據庫中讀取數據,更新到緩存中。

阿旺想的這個策略是有名字的,是叫 Cache Aside 策略,中文是叫旁路緩存策略。

該策略又可以細分為「讀策略」和「寫策略」。

寫策略的步驟:

  • 更新數據庫中的數據;
  • 刪除緩存中的數據。

讀策略的步驟:

  • 如果讀取的數據命中了緩存,則直接返回數據;
  • 如果讀取的數據沒有命中緩存,則從數據庫中讀取數據,然后將數據寫入到緩存,并且返回給用戶。

阿旺在想到「寫策略」的時候,又陷入更深層次的思考,到底該選擇哪種順序呢?

  • 先刪除緩存,再更新數據庫;
  • 先更新數據庫,再刪除緩存。

阿旺這次經過上次教訓,不再「想當然」的亂選方案,因為老板這次給的餅很大啊,必須把握住。

于是阿旺用并發的角度來分析,看看這兩種方案哪個可以保證數據庫與緩存的數據一致性。

先刪除緩存,再更新數據庫

阿旺還是以用戶表的場景來分析。

假設某個用戶的年齡是 20,請求 A 要更新用戶年齡為 21,所以它會刪除緩存中的內容。這時,另一個請求 B 要讀取這個用戶的年齡,它查詢緩存發現未命中后,會從數據庫中讀取到年齡為 20,并且寫入到緩存中,然后請求 A 繼續更改數據庫,將用戶的年齡更新為 21。

最終,該用戶年齡在緩存中是 20(舊值),在數據庫中是 21(新值),緩存和數據庫的數據不一致。

可以看到,先刪除緩存,再更新數據庫,在「讀 + 寫」并發的時候,還是會出現緩存和數據庫的數據不一致的問題。

先更新數據庫,再刪除緩存

繼續用「讀 + 寫」請求的并發的場景來分析。

假如某個用戶數據在緩存中不存在,請求 A 讀取數據時從數據庫中查詢到年齡為 20,在未寫入緩存中時另一個請求 B 更新數據。它更新數據庫中的年齡為 21,并且清空緩存。這時請求 A 把從數據庫中讀到的年齡為 20 的數據寫入到緩存中。

最終,該用戶年齡在緩存中是 20(舊值),在數據庫中是 21(新值),緩存和數據庫數據不一致。

從上面的理論上分析,先更新數據庫,再刪除緩存也是會出現數據不一致性的問題,但是在實際中,這個問題出現的概率并不高。

因為緩存的寫入通常要遠遠快于數據庫的寫入,所以在實際中很難出現請求 B 已經更新了數據庫并且刪除了緩存,請求 A 才更新完緩存的情況。

而一旦請求 A 早于請求 B 刪除緩存之前更新了緩存,那么接下來的請求就會因為緩存不命中而從數據庫中重新讀取數據,所以不會出現這種不一致的情況。

所以,「先更新數據庫 + 再刪除緩存」的方案,是可以保證數據一致性的。

而且阿旺為了確保萬無一失,還給緩存數據加上了「過期時間」,就算在這期間存在緩存數據不一致,有過期時間來兜底,這樣也能達到最終一致。

阿旺思考到這一步后,覺得自己真的是個小天才,因為他竟然想到了個「天衣無縫」的方案,他二話不說就采用了這個方案,又經過幾天的折騰,終于完成了。

他自信滿滿的向老板匯報,已經解決了上次客戶的投訴的問題了。老板覺得阿旺這小伙子不錯,這么快就解決問題了,然后讓阿旺在觀察幾天。

事情哪有這么順利呢?結果又沒過多久,老板又收到客戶的投訴了,說自己明明更新了數據,但是數據要過一段時間才生效,客戶接受不了。

老板面無表情的找上阿旺,讓阿旺盡快查出問題。

阿旺得知又有 Bug 就更慌了,立馬就登錄服務器去排查問題,查看日志后得知了原因。

「先更新數據庫, 再刪除緩存」其實是兩個操作,前面的所有分析都是建立在這兩個操作都能同時執行成功,而這次客戶投訴的問題就在于,在****刪除緩存(第二個操作)的時候失敗了,導致緩存中的數據是舊值。

好在之前給緩存加上了過期時間,所以才會出現客戶說的過一段時間才更新生效的現象,假設如果沒有這個過期時間的兜底,那后續的請求讀到的就會一直是緩存中的舊數據,這樣問題就更大了。

所以新的問題來了,如何保證「先更新數據庫 ,再刪除緩存」這兩個操作能執行成功?

阿旺分析出問題后,慌慌張張的向老板匯報了問題。

老板知道事情后,又給了阿旺幾天來解決這個問題,畫餅的事情這次沒有再提了。

阿旺會用什么方式來解決這個問題呢?

老板畫的餅事情,能否兌現給阿旺呢?

預知后事,且聽下回阿旺的故事。

小結

阿旺的事情就聊到這,我們繼續說點其他。

「先更新數據庫,再刪除緩存」的方案雖然保證了數據庫與緩存的數據一致性,但是每次更新數據的時候,緩存的數據都會被刪除,這樣會對緩存的命中率帶來影響。

所以,如果我們的業務對緩存命中率有很高的要求,我們可以采用「更新數據庫 + 更新緩存」的方案,因為更新緩存并不會出現緩存未命中的情況。

但是這個方案前面我們也分析過,在兩個更新請求并發執行的時候,會出現數據不一致的問題,因為更新數據庫和更新緩存這兩個操作是獨立的,而我們又沒有對操作做任何并發控制,那么當兩個線程并發更新它們的話,就會因為寫入順序的不同造成數據的不一致。

所以我們得增加一些手段來解決這個問題,這里提供兩種做法:

  • 在更新緩存前先加個分布式鎖,保證同一時間只運行一個請求更新緩存,就會不會產生并發問題了,當然引入了鎖后,對于寫入的性能就會帶來影響。
  • 在更新完緩存時,給緩存加上較短的過期時間,這樣即時出現緩存不一致的情況,緩存的數據也會很快過期,對業務還是能接受的。

對了,針對「先刪除緩存,再刪除數據庫」方案在「讀 + 寫」并發請求而造成緩存不一致的解決辦法是「延遲雙刪」。

延遲雙刪實現的偽代碼如下:

#刪除緩存
redis.delKey(X)
#更新數據庫
db.update(X)
#睡眠
Thread.sleep(N)
#再刪除緩存
redis.delKey(X)

加了個睡眠時間,主要是為了確保請求 A 在睡眠的時候,請求 B 能夠在這這一段時間完成「從數據庫讀取數據,再把缺失的緩存寫入緩存」的操作,然后請求 A 睡眠完,再刪除緩存。

所以,請求 A 的睡眠時間就需要大于請求 B 「從數據庫讀取數據 + 寫入緩存」的時間。

但是具體睡眠多久其實是個玄學,很難評估出來,所以這個方案也只是盡可能保證一致性而已,極端情況下,依然也會出現緩存不一致的現象。

因此,還是比較建議用「先更新數據庫,再刪除緩存」的方案。

前情回顧

上回程序員阿旺為了提升數據訪問的性能,引入 Redis 作為 MySQL 緩存層,但是這件事情并不是那么簡單,因為還要考慮 Redis 和 MySQL 雙寫一致性的問題。

阿旺經過一番周折,最終選用了「先更新數據庫,再刪緩存」的策略,原因是這個策略即使在并發讀寫時,也能最大程度保證數據一致性。

聰明的阿旺還搞了個兜底的方案,就是給緩存加上了過期時間。

本以為就這樣不會在出現數據一致性的問題,結果將功能上線后,老板還是收到用戶的投訴「說自己明明更新了數據,但是數據要過一段時間才生效」,客戶接受不了。

老板轉告給了阿旺,阿旺得知又有 Bug 就更慌了,立馬就登錄服務器去排查問題,查看日志后得知了原因。

「先更新數據庫, 再刪除緩存」其實是兩個操作,這次客戶投訴的問題就在于,在刪除緩存(第二個操作)的時候失敗了,導致緩存中的數據是舊值,而數據庫是最新值。

好在之前給緩存加上了過期時間,所以才會出現客戶說的過一段時間才更新生效的現象,假設如果沒有這個過期時間的兜底,那后續的請求讀到的就會一直是緩存中的舊數據,這樣問題就更大了。

所以新的問題來了,如何保證「先更新數據庫 ,再刪除緩存」這兩個操作能執行成功?

阿旺分析出問題后,慌慌張張的向老板匯報了問題。

老板知道事情后,又給了阿旺幾天來解決這個問題,畫餅的事情這次沒有再提了。

  • 阿旺會用什么方式來解決這個問題呢?
  • 老板畫的餅事情,能否兌現給阿旺呢?

如何保證兩個操作都能執行成功?

這次用戶的投訴是因為在刪除緩存(第二個操作)的時候失敗了,導致緩存還是舊值,而數據庫是最新值,造成數據庫和緩存數據不一致的問題,會對敏感業務造成影響。

舉個例子,來說明下。

應用要把數據 X 的值從 1 更新為 2,先成功更新了數據庫,然后在 Redis 緩存中刪除 X 的緩存,但是這個操作卻失敗了,這個時候數據庫中 X 的新值為 2,Redis 中的 X 的緩存值為 1,出現了數據庫和緩存數據不一致的問題。

那么,后續有訪問數據 X 的請求,會先在 Redis 中查詢,因為緩存并沒有 誒刪除,所以會緩存命中,但是讀到的卻是舊值 1。

其實不管是先操作數據庫,還是先操作緩存,只要第二個操作失敗都會出現數據一致的問題。

問題原因知道了,該怎么解決呢?有兩種方法:

  • 重試機制。
  • 訂閱 MySQL binlog,再操作緩存。

先來說第一種。

重試機制

我們可以引入消息隊列,將第二個操作(刪除緩存)要操作的數據加入到消息隊列,由消費者來操作數據。

  • 如果應用刪除緩存失敗,可以從消息隊列中重新讀取數據,然后再次刪除緩存,這個就是重試機制。當然,如果重試超過的一定次數,還是沒有成功,我們就需要向業務層發送報錯信息了。
  • 如果刪除緩存成功,就要把數據從消息隊列中移除,避免重復操作,否則就繼續重試。

舉個例子,來說明重試機制的過程。

訂閱 MySQL binlog,再操作緩存

「先更新數據庫,再刪緩存」的策略的第一步是更新數據庫,那么更新數據庫成功,就會產生一條變更日志,記錄在 binlog 里。

于是我們就可以通過訂閱 binlog 日志,拿到具體要操作的數據,然后再執行緩存刪除,阿里巴巴開源的 Canal 中間件就是基于這個實現的。

Canal 模擬 MySQL 主從復制的交互協議,把自己偽裝成一個 MySQL 的從節點,向 MySQL 主節點發送 dump 請求,MySQL 收到請求后,就會開始推送 Binlog 給 Canal,Canal 解析 Binlog 字節流之后,轉換為便于讀取的結構化數據,供下游程序訂閱使用。

下圖是 Canal 的工作原理:

所以,如果要想保證「先更新數據庫,再刪緩存」策略第二個操作能執行成功,我們可以使用「消息隊列來重試緩存的刪除」,或者「訂閱 MySQL binlog 再操作緩存」,這兩種方法有一個共同的特點,都是采用異步操作緩存。

老板發餅啦

阿旺由于對消息隊列比較熟悉,所以他決定采用「消息隊列來重試緩存的刪除」的方案,來解決這次的用戶問題。

經過幾天幾夜的操作,服務器搞定啦,立馬向老板匯報工作。

老板讓阿旺再觀察些時間,如果沒問題,到中秋節就商量“餅”的事情。

時間過的很快,中秋佳節到了,這期間一直都沒有用戶反饋數據不一致的問題。

老板見這次阿旺表現很好,沒有再出現任何差錯,服務器的訪問性能也上來了,于是給阿旺發了這個超級大的月餅,你看這個餅又大又圓,就像你的代碼又長又多。

責任編輯:武曉燕 來源: 小林coding
相關推薦

2022-03-31 08:21:14

數據庫緩存雙寫數據一致性

2024-10-28 12:41:25

2022-03-29 10:39:10

緩存數據庫數據

2024-12-26 15:01:29

2020-09-03 09:45:38

緩存數據庫分布式

2020-06-01 22:09:48

緩存緩存同步緩存誤用

2022-02-23 09:17:09

數據庫分離變更

2025-04-27 08:52:21

Redis數據庫緩存

2021-12-01 08:26:27

數據庫緩存技術

2021-06-11 09:21:58

緩存數據庫Redis

2022-10-19 12:22:53

并發扣款一致性

2018-05-16 16:10:28

數據庫緩存MySQL

2022-12-05 08:24:32

mongodb數據庫數據

2019-08-30 12:46:10

并發扣款查詢SQL

2025-03-27 08:20:54

2023-09-07 08:11:24

Redis管道機制

2022-12-14 08:23:30

2024-01-15 10:38:20

多級緩存數據一致性分布式緩存

2021-03-04 06:49:53

RocketMQ事務

2024-08-20 16:13:52

點贊
收藏

51CTO技術棧公眾號

成人性色av| 亚洲国产91色在线| 中文字幕剧情在线观看一区| 亚洲图片在线播放| 欧美.www| 亚洲成人精品久久| 国产三级日本三级在线播放| 9色在线视频| 国产精品一二三四| 97视频在线观看免费高清完整版在线观看| 亚洲精品视频大全| av国产精品| 精品成人国产在线观看男人呻吟| 日本日本精品二区免费| 97人妻人人澡人人爽人人精品 | 国产综合久久久久久鬼色| 欧美福利视频在线| 性欧美精品中出| 国色天香久久精品国产一区| 精品免费在线观看| 中文字幕欧美人与畜| 天天射,天天干| 久久av中文字幕片| 欧美亚洲国产视频小说| 日韩一区二区三区四区视频| 第四色在线一区二区| 欧洲一区二区三区在线| 日韩视频免费播放| 日韩美女网站| 91丨porny丨在线| 亚洲va欧美va国产综合剧情| 久久久免费高清视频| 中文字幕亚洲精品乱码| 亚洲一级黄色片| 日本少妇xxxx| 成年永久一区二区三区免费视频| 黑人巨大精品欧美一区二区三区| 国产成人三级视频| yjizz视频网站在线播放| 成人ar影院免费观看视频| 国产在线视频欧美| 无码人妻一区二区三区线| 黄色精品免费| 久久精品久久精品亚洲人| 全黄一级裸体片| silk一区二区三区精品视频| 91精品婷婷国产综合久久性色| 成人小视频在线看| 51漫画成人app入口| 综合色天天鬼久久鬼色| 亚洲春色在线视频| 你懂的在线观看视频网站| 成人精品视频.| 99re国产在线播放| 国产白浆在线观看| 极品少妇一区二区三区精品视频| 国产精品成人aaaaa网站| 羞羞影院体验区| 亚洲成人在线| 欧美精品videosex极品1| 日韩女优一区二区| 伊人青青综合网| xvideos国产精品| 国产一区在线观看免费| 日韩精品一卡| 色吧影院999| 久久精品色妇熟妇丰满人妻| 日本欧美肥老太交大片| 有码中文亚洲精品| 国产黄色录像视频| 日韩精品91| 久久精品国亚洲| 爱爱视频免费在线观看| 中文字幕人成人乱码| 久久99国产综合精品女同| 清纯粉嫩极品夜夜嗨av| 狠狠干综合网| 91成人福利在线| 久久国产视频一区| 日韩在线一区二区| 国产精品自拍偷拍视频| 97人妻精品一区二区三区软件 | 欧美激情精品在线| 久久精品视频6| 一区二区三区四区五区精品视频 | 18成人免费观看视频| 久久久中文字幕| 日本韩国欧美中文字幕| 久久一区欧美| 成人免费xxxxx在线观看| 不卡av中文字幕| 91麻豆精品视频| 相泽南亚洲一区二区在线播放| 日本福利在线| 亚洲一区二区三区小说| 久久网站免费视频| 四虎国产精品免费久久5151| 欧美一区二区精品在线| 黄色性生活一级片| 久久中文视频| 久久理论片午夜琪琪电影网| 久久99国产综合精品免费| 久久国产精品色婷婷| 国产精品区二区三区日本| 久久久久久青草| 亚洲视频每日更新| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 国产激情欧美| 亚洲成人精品久久久| 久久婷婷五月综合| 欧美日韩 国产精品| 国产99久久精品一区二区 夜夜躁日日躁 | 岛国毛片在线播放| av男人一区| 国产亚洲精品久久久久久777| 四虎精品免费视频| 久久av在线| 99re在线播放| av电影在线网| 午夜婷婷国产麻豆精品| 男女猛烈激情xx00免费视频| 国产韩日精品| 亚洲第一视频在线观看| 看黄色录像一级片| 亚洲在线免费| 99久久一区三区四区免费| 成人免费在线电影| 五月激情丁香一区二区三区| 视频免费1区二区三区| 台湾佬综合网| 欧美精品久久久久| 国产又粗又长又大视频| 国产欧美一区二区三区网站| 久久久久久久久久网| 伊人久久一区| 亚洲最新在线视频| 特级西西444www大精品视频免费看 | 中文字幕日韩综合av| 国产成人无码精品久在线观看| 国内成人精品2018免费看| 区一区二区三区中文字幕| 操人在线观看| 精品国产自在久精品国产| 久久久久久久久久97| 日韩电影在线一区二区三区| 久久riav| 深夜成人在线| 亚洲黄在线观看| 国产性70yerg老太| 国产成人综合精品三级| 色乱码一区二区三区熟女| 国产黄色一区| 日韩在线观看免费网站| 中文字幕精品一区二| 国产色产综合产在线视频| 久草精品在线播放| 久久av超碰| 日本午夜在线亚洲.国产| 四虎电影院在线观看| 丰满岳妇乱一区二区三区| aaaa黄色片| 亚洲欧美日韩一区在线观看| 精品一区二区久久久久久久网站| 9999热视频在线观看| 日韩第一页在线| 可以免费在线观看的av| 久久久不卡影院| 日日碰狠狠丁香久燥| 教室别恋欧美无删减版| 国产精品美女在线| 免费a在线看| 日韩欧美一级特黄在线播放| 久久久久亚洲AV成人| 丁香亚洲综合激情啪啪综合| 免费看毛片的网址| 香蕉国产成人午夜av影院| 日韩免费在线观看视频| aiai在线| 欧美久久一二三四区| 少妇影院在线观看| 99这里只有久久精品视频| www.亚洲天堂网| 色135综合网| 亚洲自拍欧美色图| 日韩在线伦理| 最近2019免费中文字幕视频三| 97在线视频人妻无码| 亚洲午夜视频在线| 久久久久久久久久久久| 韩国视频一区二区| 水蜜桃色314在线观看| 国产一区二区三区四区五区传媒| 国产精品一二区| 久草在线视频资源| 亚洲欧美综合图区| 国产精品无码白浆高潮| 午夜电影一区二区三区| 少妇太紧太爽又黄又硬又爽小说| 国产成人一区在线| aaa毛片在线观看| 911久久香蕉国产线看观看| 国内一区在线| 成人午夜毛片| 97在线免费观看视频| 尤物视频在线免费观看| 亚洲国产欧美自拍| 97人妻精品一区二区三区动漫| 黄色一区二区在线| 日韩成人短视频| 久久综合狠狠综合| 18深夜在线观看免费视频| 久久精品官网| 青草视频在线观看视频| 日韩毛片视频| 久久久久欧美| 深夜福利一区| 国产精品夜间视频香蕉| 亚洲女同志freevdieo| 欧美精品在线第一页| 在线国产情侣| 日韩精品中文字幕在线观看| 999久久久久久| 欧洲国产伦久久久久久久| 国产成人精品亚洲男人的天堂| 国产精品久久99| 国产精品九九九九九| 国产福利不卡视频| 亚洲欧美日韩综合网| 老司机午夜精品视频| 国产中文字幕乱人伦在线观看| 91综合在线| 欧美视频观看一区| 色天下一区二区三区| eeuss一区二区三区| 91精品网站在线观看| 国产精品h片在线播放| www.youjizz.com在线| 欧美成人免费视频| 国产淫片在线观看| 久久国内精品一国内精品| 国产福利电影在线| 亚洲欧美综合另类中字| 欧洲一级在线观看| 国产丝袜一区二区| 亚洲色图狠狠干| 亚洲国产欧美一区二区三区同亚洲| 精品黑人一区二区三区国语馆| 欧美精品一卡二卡| 在线观看中文字幕网站| 欧美色综合天天久久综合精品| 黄色片视频免费| 色综合中文字幕| 精品久久久久久久久久久久久久久久 | 亚洲午夜精品一区二区国产| 亚洲日本欧美在线| 99精品在线| av磁力番号网| 国产综合欧美| 91免费黄视频| 中文日韩在线| 99爱视频在线| 久久久成人网| 啊啊啊国产视频| 免费xxxx性欧美18vr| 午夜国产福利在线观看| 韩国三级在线一区| 一区二区在线免费观看视频| 粉嫩高潮美女一区二区三区| 动漫美女无遮挡免费| 不卡在线视频中文字幕| 巨胸大乳www视频免费观看| 欧美国产一区在线| 国产黄色的视频| 亚洲高清不卡在线观看| 国产精品久久久久久久妇| 91精品1区2区| 国产伦理吴梦梦伦理| 精品国产免费一区二区三区四区| 色婷婷av一区二区三区之红樱桃| 亚洲免费av电影| 3p在线观看| 欧美日韩国产二区| 在线观看欧美日韩电影| 国产色综合天天综合网| 2021年精品国产福利在线| 九九九久久久| 日韩久久精品网| 日韩激情视频一区二区| 销魂美女一区二区三区视频在线| 91制片厂毛片| 国产麻豆成人传媒免费观看| 黑人玩弄人妻一区二区三区| 久久影院电视剧免费观看| 91社区视频在线观看| 亚洲一区二区美女| 无码人妻熟妇av又粗又大| 欧美一级片在线看| 嫩草精品影院| 欧美国产日韩中文字幕在线| 免费成人直播| 99re视频| 日韩精品中文字幕第1页| 国产日韩欧美精品在线观看| 日本女优在线视频一区二区| 亚洲妇女无套内射精| 国产日韩欧美激情| 国产午夜小视频| 欧美日韩三级一区二区| 欧美自拍偷拍一区二区| 中文字幕在线观看亚洲| 欧美巨大丰满猛性社交| 91性高湖久久久久久久久_久久99| 欧美亚洲大陆| 欧美日韩午夜爽爽| 蜜臀精品一区二区三区在线观看 | 日韩黄在线观看| 免费av不卡| 日本久久91av| 国产乱人伦精品一区| 自拍偷拍视频在线| 日韩国产精品大片| 精品国产av色一区二区深夜久久 | 免费成人在线电影| 亚洲a一级视频| 色喇叭免费久久综合| 日韩网址在线观看| 国产精品99久久久久久宅男| jizz18女人高潮| 欧美日韩亚洲精品内裤| 亚洲精品国产精品乱码不卡| 最近2019中文字幕一页二页| 国模套图日韩精品一区二区| 国产日韩欧美一区二区| 欧美1区免费| 五月天婷婷在线观看视频| 国产精品素人视频| 艳妇乳肉豪妇荡乳av无码福利| 亚洲欧美精品伊人久久| 日韩激情电影免费看| 国产精品一区二区免费| 欧美日韩一区二区高清| 天天摸天天舔天天操| 国产精品视频一二三| 日本黄色中文字幕| 国产午夜精品视频| 欧美gay视频| 欧美成人蜜桃| 天堂久久久久va久久久久| 在线 丝袜 欧美 日韩 制服| 同产精品九九九| 熟妇高潮一区二区三区| 91精品国产精品| 成人直播在线观看| 国产手机免费视频| 成人黄色在线视频| 成年人午夜视频| 日韩精品免费在线视频| 蜜臀久久精品| 人禽交欧美网站免费| 日韩专区中文字幕一区二区| 久久国产柳州莫菁门| 色婷婷狠狠综合| www.国产精品.com| 国产女同一区二区| 亚洲国产一区二区在线观看| 亚洲欧美一区二区三区不卡| 亚洲另类色综合网站| 亚洲国产精品久久久久久6q| 午夜精品一区二区三区在线视频| 日韩大片在线免费观看| 亚洲精品中文字幕无码蜜桃| 国产蜜臀av在线一区二区三区| 中文人妻熟女乱又乱精品| 日韩中文字幕视频在线| 日韩精品一区二区三区免费视频| 菠萝蜜视频在线观看入口| 成人午夜在线视频| 99超碰在线观看| 色小说视频一区| 欧美午夜在线播放| 波多野结衣家庭教师在线播放| 久久久久久影视| 91好色先生tv| 国内成人精品视频| 精品国产中文字幕第一页| 中文字幕资源在线观看| 亚洲一卡二卡三卡四卡五卡| 日本人妖在线| 国产在线拍偷自揄拍精品| 欧美久久99| 国产熟妇久久777777| 欧美日韩aaaaaa| 丁香高清在线观看完整电影视频 | 国外成人在线直播| 国产亚洲一区| 黑人巨大猛交丰满少妇| 色综合咪咪久久| 羞羞的视频在线看| 欧美日韩在线精品一区二区三区| 精品一区二区三区在线播放 |