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

不同業務場景該如何選擇緩存的讀寫策略?

數據庫
本篇文章主要帶你了解了緩存使用的幾種策略,以及每種策略適用的使用場景是怎樣的。

你可能覺得緩存的讀寫很簡單,只需要優先讀緩存,緩存不命中就從數據庫查詢,查詢到了就回種緩存。實際上,針對不同的業務場景,緩存的讀寫策略也是不同的。

而我們在選擇策略時也需要考慮諸多的因素,比如說,緩存中是否有可能被寫入臟數據,策略的讀寫性能如何,是否存在緩存命中率下降的情況等等。

接下來,我就以標準的“緩存 + 數據庫”的場景為例,帶你剖析經典的緩存讀寫策略以及它們適用的場景。這樣一來,你就可以在日常的工作中根據不同的場景選擇不同的讀寫策略。

Cache Aside(旁路緩存)策略

我們來考慮一種最簡單的業務場景,比方說在你的電商系統中有一個用戶表,表中只有 ID 和年齡兩個字段,緩存中我們以 ID 為 Key 存儲用戶的年齡信息。那么當我們要把 ID 為 1 的用戶的年齡從 19 變更為 20,要如何做呢?

你可能會產生這樣的思路:先更新數據庫中 ID 為 1 的記錄,再更新緩存中 Key 為 1 的數據。

這個思路會造成緩存和數據庫中的數據不一致。比如,A 請求將數據庫中 ID 為 1 的用戶年齡從 19 變更為 20,與此同時,請求 B 也開始更新 ID 為 1 的用戶數據,它把數據庫中記錄的年齡變更為 21,然后變更緩存中的用戶年齡為 21。緊接著,A 請求開始更新緩存數據,它會把緩存中的年齡變更為 20。此時,數據庫中用戶年齡是 21,而緩存中的用戶年齡卻是 20。

為什么產生這個問題呢?因為變更數據庫和變更緩存是兩個獨立的操作,而我們并沒有對操作做任何的并發控制。那么當兩個線程并發更新它們的時候,就會因為寫入順序的不同造成數據的不一致。

另外,直接更新緩存還存在另外一個問題就是丟失更新。還是以我們的電商系統為例,假如電商系統中的賬戶表有三個字段:ID、戶名和金額,這個時候緩存中存儲的就不只是金額信息,而是完整的賬戶信息了。當更新緩存中賬戶金額時,你需要從緩存中查詢完整的賬戶數據,把金額變更后再寫入到緩存中。

這個過程中也會有并發的問題,比如說原有金額是 20,A 請求從緩存中讀到數據,并且把金額加 1,變更成 21,在未寫入緩存之前又有請求 B 也讀到緩存的數據后把金額也加 1,也變更成 21,兩個請求同時把金額寫回緩存,這時緩存里面的金額是 21,但是我們實際上預期是金額數加 2,這也是一個比較大的問題。

那我們要如何解決這個問題呢?其實,我們可以在更新數據時不更新緩存,而是刪除緩存中的數據,在讀取數據時,發現緩存中沒了數據之后,再從數據庫中讀取數據,更新到緩存中。

這個策略就是我們使用緩存最常見的策略,Cache Aside 策略(也叫旁路緩存策略),這個策略數據以數據庫中的數據為準,緩存中的數據是按需加載的。它可以分為讀策略和寫策略,其中讀策略的步驟是:

  • 從緩存中讀取數據;
  • 如果緩存命中,則直接返回數據;
  • 如果緩存不命中,則從數據庫中查詢數據;
  • 查詢到數據后,將數據寫入到緩存中,并且返回給用戶。

寫策略的步驟是:

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

你也許會問了,在寫策略中,能否先刪除緩存,后更新數據庫呢?答案是不行的,因為這樣也有可能出現緩存數據不一致的問題,我以用戶表的場景為例解釋一下。

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

那么像 Cache Aside 策略這樣先更新數據庫,后刪除緩存就沒有問題了嗎?其實在理論上還是有缺陷的。

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

不過這種問題出現的幾率并不高,原因是緩存的寫入通常遠遠快于數據庫的寫入,所以在實際中很難出現請求 B 已經更新了數據庫并且清空了緩存,請求 A 才更新完緩存的情況。而一旦請求 A 早于請求 B 清空緩存之前更新了緩存,那么接下來的請求就會因為緩存為空而從數據庫中重新加載數據,所以不會出現這種不一致的情況。

Cache Aside 策略是我們日常開發中最經常使用的緩存策略,不過我們在使用時也要學會依情況而變。比如說當新注冊一個用戶,按照這個更新策略,你要寫數據庫,然后清理緩存(當然緩存中沒有數據給你清理)。可當我注冊用戶后立即讀取用戶信息,并且數據庫主從分離時,會出現因為主從延遲所以讀不到用戶信息的情況。

而解決這個問題的辦法恰恰是在插入新數據到數據庫之后寫入緩存,這樣后續的讀請求就會從緩存中讀到數據了。并且因為是新注冊的用戶,所以不會出現并發更新用戶信息的情況。

Cache Aside 存在的最大的問題是當寫入比較頻繁時,緩存中的數據會被頻繁地清理,這樣會對緩存的命中率有一些影響。如果你的業務對緩存命中率有嚴格的要求,那么可以考慮兩種解決方案:

  • 一種做法是在更新數據時也更新緩存,只是在更新緩存前先加一個分布式鎖,因為這樣在同一時間只允許一個線程更新緩存,就不會產生并發問題了。當然這么做對于寫入的性能會有一些影響;
  • 另一種做法同樣也是在更新數據時更新緩存,只是給緩存加一個較短的過期時間,這樣即使出現緩存不一致的情況,緩存的數據也會很快過期,對業務的影響也是可以接受。

當然了,除了這個策略,在計算機領域還有其他幾種經典的緩存策略,它們也有各自適用的使用場景。

Read/Write Through(讀穿 / 寫穿)策略

這個策略的核心原則是用戶只與緩存打交道,由緩存和數據庫通信,寫入或者讀取數據。這就好比你在匯報工作的時候只對你的直接上級匯報,再由你的直接上級匯報給他的上級,你是不能越級匯報的。

Write Through 的策略是這樣的:先查詢要寫入的數據在緩存中是否已經存在,如果已經存在,則更新緩存中的數據,并且由緩存組件同步更新到數據庫中,如果緩存中數據不存在,我們把這種情況叫做“Write Miss(寫失效)”。

一般來說,我們可以選擇兩種“Write Miss”方式:

  • 一個是“Write Allocate(按寫分配)”,做法是寫入緩存相應位置,再由緩存組件同步更新到數據庫中;
  • 另一個是“No-write allocate(不按寫分配)”,做法是不寫入緩存中,而是直接更新到數據庫中。

在 Write Through 策略中,我們一般選擇“No-write allocate”方式,原因是無論采用哪種“Write Miss”方式,我們都需要同步將數據更新到數據庫中,而“No-write allocate”方式相比“Write Allocate”還減少了一次緩存的寫入,能夠提升寫入的性能。

Read Through 策略就簡單一些,它的步驟是這樣的:先查詢緩存中數據是否存在,如果存在則直接返回,如果不存在,則由緩存組件負責從數據庫中同步加載數據。

下面是 Read Through/Write Through 策略的示意圖:

Read Through/Write Through 策略的特點是由緩存節點而非用戶來和數據庫打交道,在我們開發過程中相比 Cache Aside 策略要少見一些,原因是我們經常使用的分布式緩存組件,無論是 Memcached 還是 Redis 都不提供寫入數據庫,或者自動加載數據庫中的數據的功能。而我們在使用本地緩存的時候可以考慮使用這種策略,比如說在上一節中提到的本地緩存 Guava Cache 中的 Loading Cache 就有 Read Through 策略的影子。

我們看到 Write Through 策略中寫數據庫是同步的,這對于性能來說會有比較大的影響,因為相比于寫緩存,同步寫數據庫的延遲就要高很多了。那么我們可否異步地更新數據庫?這就是我們接下來要提到的“Write Back”策略。

Write Back(寫回)策略

這個策略的核心思想是在寫入數據時只寫入緩存,并且把緩存塊兒標記為“臟”的。而臟塊兒只有被再次使用時才會將其中的數據寫入到后端存儲中。

需要注意的是,在“Write Miss”的情況下,我們采用的是“Write Allocate”的方式,也就是在寫入后端存儲的同時要寫入緩存,這樣我們在之后的寫請求中都只需要更新緩存即可,而無需更新后端存儲了,我將 Write back 策略的示意圖放在了下面:

如果使用 Write Back 策略的話,讀的策略也有一些變化了。我們在讀取緩存時如果發現緩存命中則直接返回緩存數據。如果緩存不命中則尋找一個可用的緩存塊兒,如果這個緩存塊兒是“臟”的,就把緩存塊兒中之前的數據寫入到后端存儲中,并且從后端存儲加載數據到緩存塊兒,如果不是臟的,則由緩存組件將后端存儲中的數據加載到緩存中,最后我們將緩存設置為不是臟的,返回數據就好了。

發現了嗎?其實這種策略不能被應用到我們常用的數據庫和緩存的場景中,它是計算機體系結構中的設計,比如我們在向磁盤中寫數據時采用的就是這種策略。無論是操作系統層面的 Page Cache,還是日志的異步刷盤,亦或是消息隊列中消息的異步寫入磁盤,大多采用了這種策略。因為這個策略在性能上的優勢毋庸置疑,它避免了直接寫磁盤造成的隨機寫問題,畢竟寫內存和寫磁盤的隨機 I/O 的延遲相差了幾個數量級呢。

但因為緩存一般使用內存,而內存是非持久化的,所以一旦緩存機器掉電,就會造成原本緩存中的臟塊兒數據丟失。所以你會發現系統在掉電之后,之前寫入的文件會有部分丟失,就是因為 Page Cache 還沒有來得及刷盤造成的。

當然,你依然可以在一些場景下使用這個策略,在使用時,我想給你的落地建議是:你在向低速設備寫入數據的時候,可以在內存里先暫存一段時間的數據,甚至做一些統計匯總,然后定時地刷新到低速設備上。比如說,你在統計你的接口響應時間的時候,需要將每次請求的響應時間打印到日志中,然后監控系統收集日志后再做統計。但是如果每次請求都打印日志無疑會增加磁盤 I/O,那么不如把一段時間的響應時間暫存起來,經過簡單的統計平均耗時,每個耗時區間的請求數量等等,然后定時地,批量地打印到日志中。

總結

本篇文章主要帶你了解了緩存使用的幾種策略,以及每種策略適用的使用場景是怎樣的。我想讓你掌握的重點是:

  • Cache Aside 是我們在使用分布式緩存時最常用的策略,你可以在實際工作中直接拿來使用。
  • Read/Write Through 和 Write Back 策略需要緩存組件的支持,所以比較適合你在實現本地緩存組件的時候使用;
  • Write Back 策略是計算機體系結構中的策略,不過寫入策略中的只寫緩存,異步寫入后端存儲的策略倒是有很多的應用場景。
責任編輯:趙寧寧 來源: 冰河技術
相關推薦

2021-09-13 10:31:02

Java原子

2024-09-05 16:01:55

2015-07-22 17:30:14

應用交付 太一星晨

2017-06-01 14:28:07

2021-07-20 15:42:05

編程語言PythonJava

2020-01-03 09:57:33

Microsoft SSQL數據庫

2023-02-07 13:27:00

運營策略分析

2025-06-30 07:40:00

系統通知架構推送

2022-10-20 09:26:24

MySQLOracleSqlServer

2015-07-09 10:22:27

CloudStackOpenStack云計算

2023-05-05 10:45:39

聯合索引數據

2018-10-09 09:37:59

物聯網聯網設備IOT

2021-10-18 11:27:07

運營分析體系

2012-10-10 08:44:18

NativeWebHybrid

2015-06-30 09:44:41

公有云游戲游戲云

2016-12-29 11:01:54

ReactVue

2022-02-09 11:51:43

滲透測試漏洞攻擊

2021-06-29 09:00:00

機器人ITRPA

2015-09-15 09:50:02

CIO ITaaSIT即服務

2025-03-11 09:00:00

Spring依賴注入Java
點贊
收藏

51CTO技術棧公眾號

老牛嫩草一区二区三区日本 | 久久久久久免费看| 色婷婷av一区二区三区之e本道| 亚洲美女一区| 日韩小视频在线| 在线视频 日韩| 国产精品美女午夜爽爽| 亚洲一卡二卡三卡四卡无卡久久| 欧美大陆一区二区| 国产欧美日韩成人| 美女91精品| 欧美大片免费观看| 亚洲一二三精品| 盗摄系列偷拍视频精品tp| 在线观看视频一区二区| 男人c女人视频| 在线免费看a| 99免费精品在线| 成人在线播放av| 久久精品五月天| 亚洲国产精品第一区二区三区| 在线丨暗呦小u女国产精品| 国产一级免费片| 91精品在线免费视频| 一本在线高清不卡dvd| 99er在线视频| 成人福利在线观看视频| 国产香蕉久久精品综合网| 国产福利久久精品| 国产女同91疯狂高潮互磨| 日韩一区欧美二区| 91精品国产沙发| 免费在线观看av网址| 99久久夜色精品国产亚洲狼| 亚洲欧美综合图区| 99re久久精品国产| 国产精品videossex| 日韩一级在线观看| 在线观看中文av| 96sao精品免费视频观看| 在线免费观看日本欧美| 无码aⅴ精品一区二区三区浪潮| 色女人在线视频| 亚洲免费毛片网站| 9l视频自拍9l视频自拍| 欧洲美女少妇精品| 18涩涩午夜精品.www| 亚洲欧洲一二三| 夜级特黄日本大片_在线| 久久久精品国产免费观看同学| 精品国产一区二区三区日日嗨| 亚洲国产综合一区| 成人毛片老司机大片| av成人免费观看| 风流老熟女一区二区三区| 国产+成+人+亚洲欧洲自线| 亚洲中国色老太| 国产成人毛毛毛片| 成人高清视频免费观看| 国产欧美日韩一区二区三区| 可以免费观看的毛片| 波多野结衣视频一区| 精品一区国产| 国产三级在线看| 国产精品久久网站| 日韩中文在线字幕| heyzo高清国产精品| 精品动漫一区二区| 亚洲人成无码www久久久| 日本综合视频| 日韩午夜在线观看| 欧美大喷水吹潮合集在线观看| 日本亚洲不卡| 在线观看久久久久久| 夫妻性生活毛片| 亚洲午夜一区| 国产91露脸中文字幕在线| 岳乳丰满一区二区三区| 国产美女主播视频一区| 精品综合久久| 午夜视频成人| 午夜视黄欧洲亚洲| 亚洲精品怡红院| 欧美欧美在线| 亚洲欧美日韩精品久久亚洲区 | 一本色道久久hezyo无码| 牛牛影视一区二区三区免费看| 亚洲毛片在线看| 欧美手机在线观看| 亚洲免费婷婷| 成人综合国产精品| 男男激情在线| 亚洲精品久久久蜜桃| 18禁男女爽爽爽午夜网站免费| 色婷婷成人网| 亚洲精品一二区| 日韩欧美123区| 老司机免费视频久久| 亚洲jizzjizz日本少妇| 日本大臀精品| 亚洲乱码日产精品bd| 黄色a级片免费| 一区二区亚洲视频| 国产一区二区三区在线看| 久久免费公开视频| 麻豆国产一区二区| 精品国产乱码久久久久| 黄网页免费在线观看| 狠狠躁夜夜躁人人躁婷婷91| 婷婷中文字幕在线观看| 久久99国内| 韩国三级电影久久久久久| 亚洲资源在线播放| 久久久一区二区三区捆绑**| 欧洲精品在线播放| 青青在线精品| 一区二区三区国产视频| 香蕉视频一区二区| 国产精一品亚洲二区在线视频| 日本一区二区精品| 中文字幕在线免费观看视频| 精品伦理精品一区| 国产高潮国产高潮久久久91| 日韩高清欧美激情| 蜜桃狠狠色伊人亚洲综合网站| 日本三级韩国三级欧美三级| 欧美欧美欧美欧美| 国产1区2区在线观看| 国产精品免费看| 国产精品三区在线| 亚洲综合影视| 日韩亚洲欧美在线| 中文字幕人妻一区二| 美女视频黄 久久| 日本一区视频在线观看免费| 亚洲天堂手机| 日韩激情视频在线| 青青草av在线播放| 97超碰欧美中文字幕| 青青草精品视频在线| 一区二区三区欧洲区| 色综合久久久888| av手机免费看| 一区二区三区精品在线观看| 在线a免费观看| 你懂的亚洲视频| 成人午夜激情网| 免费在线看a| 337p亚洲精品色噜噜噜| 九九精品视频免费| 国产成人精品亚洲日本在线桃色| 青青草影院在线观看| 免费精品一区二区三区在线观看| 久热精品视频在线观看| www.av黄色| 亚洲.国产.中文慕字在线| 中文字幕乱码在线| 免费视频一区| 先锋影音一区二区三区| 涩涩涩久久久成人精品| 毛片精品免费在线观看| 亚洲男女视频在线观看| 狠狠色噜噜狠狠狠狠97| www..com.cn蕾丝视频在线观看免费版| 日韩精品亚洲一区| 一区二区精品国产| 久久精品一级| 国内久久久精品| 极品美乳网红视频免费在线观看| 欧美吞精做爰啪啪高潮| 91麻豆免费视频网站| 成人国产在线观看| 日本美女高潮视频| 欧美一区久久| 久久人人97超碰人人澡爱香蕉| 91精品xxx在线观看| 久久精品国产96久久久香蕉| 成人h动漫精品一区二区无码| 亚洲成人免费电影| 女人又爽又黄免费女仆| 精品亚洲国产成人av制服丝袜| 激情六月天婷婷| 亚洲成aⅴ人片久久青草影院| 国产精品日韩久久久久| 欧美人与禽猛交乱配| 亚洲天堂av网| 精品国产伦一区二区三| 日韩欧美中文字幕在线播放| 黄色av片三级三级三级免费看| 国产精品亚洲а∨天堂免在线| 成熟丰满熟妇高潮xxxxx视频| 日韩成人精品一区| 国产精品免费看一区二区三区| 日本精品在线一区| 久久久久久久久久久久久久久久久久av | 亚洲精选成人| 亚洲资源视频| 日韩精品免费一区二区三区竹菊| 成人国产精品一区| 超碰超碰人人人人精品| 欧美成人一二三| 国产露出视频在线观看| 亚洲精品一区二区在线观看| 亚洲天堂免费av| 欧美日韩一区二区免费在线观看| 欧美三级日本三级| 中文文精品字幕一区二区| 国产国语性生话播放| 国产精品自拍网站| 亚洲综合日韩欧美| 日韩精品亚洲一区| 又粗又黑又大的吊av| 欧美日韩少妇| 天堂v在线视频| 国产一区三区在线播放| 国产精品视频500部| 免费欧美网站| 成人黄色在线免费| 成人全视频免费观看在线看| 日本免费在线精品| 午夜不卡影院| 国内精品伊人久久| 波多野结衣久久| 色综合天天狠天天透天天伊人| 激情视频在线观看| 色偷偷亚洲男人天堂| 成人在线免费看| 亚洲美女久久久| 午夜在线视频观看| 欧美精品一区二区久久婷婷| 精品国产无码一区二区| 欧美日韩国产高清一区| 中文字幕av无码一区二区三区| 色94色欧美sute亚洲13| www.色国产| 欧美性生交xxxxxdddd| 色婷婷av国产精品| 黄色一区二区在线观看| 久久久久久久极品| 一本色道**综合亚洲精品蜜桃冫| www.国产色| 欧美小视频在线| 亚洲va在线观看| 91九色02白丝porn| 免费av中文字幕| 欧美亚州韩日在线看免费版国语版| 色av性av丰满av| 色香色香欲天天天影视综合网| 日日夜夜综合网| 色综合久久久网| 国产情侣呻吟对白高潮| 欧美亚洲国产一区二区三区va| 影音先锋国产在线| 7777女厕盗摄久久久| 国产毛片久久久久| 日韩美女视频在线| 天堂中文字幕av| 国产视频久久久| 91se在线| 久99久在线视频| free性m.freesex欧美| 91成人精品网站| 精品无人乱码一区二区三区 | 伊人久久大香线蕉| 日韩av电影免费观看| 久久精品国产大片免费观看| 中文字幕综合在线观看| 在线免费高清一区二区三区| 春日野结衣av| 蜜臀av在线播放一区二区三区| 想看黄色一级片| 成人aa视频在线观看| 蜜桃无码一区二区三区| 亚洲色图视频免费播放| 国产精品成人久久| 在线观看视频一区二区欧美日韩| 国产一区二区波多野结衣| 精品动漫一区二区三区在线观看| 日韩成人黄色| www亚洲欧美| 在线手机中文字幕| 成人福利网站在线观看11| 国产精品白丝av嫩草影院| 日韩妆和欧美的一区二区| 亚洲欧美综合久久久| 男人日女人下面视频| 久久99国产精品免费| 久久久久亚洲AV成人无码国产| 久久久久久久久久美女| 九九精品视频免费| 色噜噜狠狠一区二区三区果冻| 99久久国产免费| 国产香蕉97碰碰久久人人| 污视频网站免费在线观看| 国产福利视频一区二区| 日韩精品亚洲专区在线观看| 日本午夜精品一区二区三区| 很黄很黄激情成人| 天天操天天爱天天爽| 成人黄色在线视频| 91n在线视频| 欧美性xxxxhd| 性一交一乱一色一视频麻豆| 中文国产成人精品| 精品人人视频| 91亚洲国产成人久久精品网站 | 波多野结衣一区二区三区| 国产三级精品三级观看| 色综合一个色综合| 午夜老司机福利| yellow中文字幕久久| 666av成人影院在线观看| 国产精品亚洲综合| 欧美极品一区二区三区| 自拍偷拍一区二区三区四区| 久久综合九色综合97婷婷| 久久在线视频精品| 欧美日产在线观看| 岛国视频免费在线观看| 97在线观看免费高清| 一区二区三区视频播放| 国产一二三四五| 精品一二线国产| 九九热免费在线| 色婷婷精品久久二区二区蜜臀av| 人妻妺妺窝人体色www聚色窝 | 亚洲精品电影在线| 日本不卡影院| wwwxx欧美| 欧美日韩精品| 无人码人妻一区二区三区免费| 国产精品久久久久影视| 中文字幕在线日亚洲9| 亚洲精品视频免费| 欧美男男激情videos| 狠狠综合久久av| 国产偷自视频区视频一区二区| 亚洲最大视频网| 亚洲影院久久精品| 性猛交富婆╳xxx乱大交天津| 粗暴蹂躏中文一区二区三区| 91国产精品| 伊人久久在线观看| 国产ts人妖一区二区| 国产精品19乱码一区二区三区| 欧美tk—视频vk| 成人免费高清观看| 精品国产乱码一区二区三区四区| 亚洲免费激情| 中文字幕网站在线观看| 欧美性欧美巨大黑白大战| 成人亚洲性情网站www在线观看| 国产ts人妖一区二区三区| 久久av中文| 亚洲免费999| 亚洲精品一二三四区| 亚洲精品97久久中文字幕无码| 久久免费福利视频| 色棕色天天综合网| 在线观看国产中文字幕| 一区二区三区在线视频播放| 免费观看黄色一级视频| 7777精品视频| 欧美精选视频在线观看| 欧美大片久久久| 亚洲影院理伦片| 可以免费看污视频的网站在线| 国产精品露脸自拍| 综合久久久久| aa片在线观看视频在线播放| 欧美专区在线观看一区| 国产美女av在线| 精品国产乱码久久久久软件 | 黑人极品videos精品欧美裸| 国产女人在线视频| 亚洲bt欧美bt日本bt| 亚洲精选在线| 妖精视频在线观看免费| 日韩一区二区三区在线| 中文字幕资源网在线观看免费| 污视频在线免费观看一区二区三区 | 成人在线免费观看网站| 男人女人拔萝卜视频| 欧美视频一二三| a在线免费观看| 欧美18视频| 国产精品系列在线播放| 99精品在线播放| 不卡中文字幕av| 国产精品亚洲二区| 韩国三级hd中文字幕有哪些| 精品人伦一区二区三区蜜桃网站| 婷婷在线视频| 国产一区二区高清视频| 久久国产人妖系列| 九一国产在线观看| 欧美成人精品一区二区| 精品国产网站| 国产xxxxxxxxx| 日韩三级视频在线看|