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

如何避免 Guava Cache 被“冷數據”污染:策略、實踐與深度解析

開發 架構
本文將深入探討 Guava Cache 中冷數據污染的成因,并詳細闡述一系列具有實操性的防御策略與技術細節。

在現代軟件架構中,緩存是提升性能、降低后端負載的關鍵組件。Google Guava Cache 作為一個強大且輕量級的本地緩存庫,因其簡潔的 API 和出色的性能而廣受 Java 開發者的青睞。然而,與所有緩存系統一樣,它面臨著一個經典的挑戰:緩存污染。

緩存污染有多種形式,其中最為隱蔽和常見的之一便是 “冷數據”污染。它指的是緩存空間被那些訪問頻率極低或不再被訪問的數據(冷數據)所占據,導致那些本應被緩存的高價值、高頻訪問的數據(熱數據)被頻繁地驅逐。這會使緩存命中率急劇下降,使其形同虛設。本文將深入探討 Guava Cache 中冷數據污染的成因,并詳細闡述一系列具有實操性的防御策略與技術細節。

一、 冷數據污染的根源與危害

在深入解決方案之前,我們首先需要清晰地理解問題本身。

1.1 什么是冷數據?

一次性數據:例如,某個臨時性的查詢結果,在生命周期內只被訪問一次,之后便再無問津。

過期熱點數據:某條數據在一段時間內(如促銷期間)是熱點,但活動結束后就迅速變冷。

低頻長尾數據:系統中有大量只被偶爾訪問的數據,它們隨機地進入緩存,但由于總量龐大,會擠占真正熱點的空間。

1.2 冷數據污染的危害

緩存命中率下降:這是最直接的危害。緩存的有效性體現在命中率上。當緩存被冷數據填滿,用戶請求無法從緩存中獲取數據,必須訪問更慢的數據庫或下游服務,導致整體響應時間增加。

內存資源浪費:緩存通常使用昂貴的內存資源。存放冷數據是對內存的極大浪費,相當于用金盤子裝石頭。

GC 壓力增大:對于 JVM 而言,大量無用的緩存對象會占據堆內存,導致垃圾回收(GC)更加頻繁,甚至引發 Full GC,影響應用穩定性。

1.3 Guava Cache 的默認行為與風險

Guava Cache 在默認情況下(如果不設置任何限制),其大小是無限的。這在生產環境中是極其危險的,極易導致內存溢出(OOM)。因此,我們通常會通過 maximumSize 或 maximumWeight 來限制其容量。一旦設置了上限,當緩存容量達到極限時,就需要一個驅逐策略 來決定“犧牲”誰。Guava Cache 默認使用的是 LRU(最近最少使用) 算法。

LRU 算法認為“最近沒有被使用的數據,在將來被使用的概率也更低”。這聽起來合理,但它無法識別“冷數據”。一個剛剛被加載進來、只訪問了一次的冷數據,由于其“新”,在 LRU 隊列中的位置可能比一個昨天被頻繁訪問、但最近幾分鐘沒被訪問的熱數據更靠前,從而導致熱數據被驅逐。

二、 防御冷數據污染的核心策略

要有效避免冷數據污染,我們需要多管齊下,在數據“進入”、“存留”和“淘汰”的各個環節進行精細控制。

策略一:基于大小的驅逐 - 第一道防線

這是最基本也是必須的配置。通過設置緩存的最大容量,從根源上防止緩存無限膨脹。

import com.google.common.cache.*;

LoadingCache<Key, Graph> cache = CacheBuilder.newBuilder()
    .maximumSize(10000) // 設置最大條目數
    .build(
        new CacheLoader<Key, Graph>() {
            @Override
            public Graph load(Key key) throws AnyException {
                return createExpensiveGraph(key);
            }
        });

// 或者使用基于權重的驅逐,提供更精細的控制
LoadingCache<Key, Graph> weightedCache = CacheBuilder.newBuilder()
    .maximumWeight(1000000)
    .weigher(new Weigher<Key, Graph>() {
        @Override
        public int weigh(Key key, Graph graph) {
            // 根據圖的復雜度或大小計算權重,例如節點數量
            return graph.vertices().size();
        }
    })
    .build(...);

技術細節

maximumSize:適用于所有條目價值相近的場景,簡單直接。

maximumWeight + Weigher:適用于條目價值或內存占用差異很大的場景。例如,緩存一個用戶信息和一個大文件內容,顯然后者權重應該更高。注意:權重是在條目被創建或更新時計算的,并且一旦緩存達到權重限制,當前條目即使權重未超,也可能無法被加入。

策略二:基于時間的驅逐 - 主動清除過期數據

這是對抗冷數據最有效的武器之一。通過給數據設定一個“保質期”,讓那些在指定時間內未被訪問的數據自動失效。

CacheBuilder.newBuilder()
    // 基于寫入時間的過期:自數據被寫入緩存后開始計時
    .expireAfterWrite(10, TimeUnit.MINUTES)
    // 基于訪問時間的過期:每次訪問都會重置計時器
    .expireAfterAccess(5, TimeUnit.MINUTES)
    .build(...);

技術細節與抉擇

expireAfterWrite

優點:能保證數據的“新鮮度”,非常適合那些一旦生成就相對固定,但后臺源數據可能變化的數據(如配置信息)。它能強制性地刷新緩存,避免提供過于陳舊的視圖。

對冷數據的克制:即使一個數據被頻繁訪問,它也會在寫入后的固定時間點被驅逐。這能有效清理掉那些“過期熱點”。

expireAfterAccess

優點:非常適合用于緩存“會話”型數據或純粹的熱點數據。只要數據一直被訪問,它就會一直存活在緩存中。

對冷數據的克制:能精準地識別并清理掉真正的冷數據。如果一個數據在5分鐘內都無人訪問,那它幾乎可以被認定為是冷數據,從而被自動驅逐。

潛在風險:如果有一個“溫數據”(偶爾被訪問),它可能會因為每次訪問都續命而長期存在,擠占空間。但它依然是防御冷數據的利器。

最佳實踐:通常推薦 expireAfterWrite 和 expireAfterAccess 結合使用,或者至少使用其中之一。對于大多數場景,expireAfterWrite 是更安全的選擇,因為它能保證數據的周期性刷新。

策略三:顯式無效化 - 精準打擊

當你知道某些數據已經“變冷”或失效時,應該主動將其清除。

// 單個清除
cache.invalidate(key);
// 批量清除
cache.invalidateAll(keys);
// 清除所有
cache.invalidateAll();

應用場景

? 在后臺數據發生變更時(如用戶更新了個人信息),立即無效化對應的緩存項。

? 在執行一個批量操作后,無效化所有受影響的緩存項。

? 提供一個管理接口,手動清除已知的、無用的緩存數據。

策略四:基于引用的驅逐 - 配合GC的最后屏障

這是一種更高級的、與 JVM 垃圾回收聯動的策略。它允許緩存中的鍵或值被垃圾回收器回收。

CacheBuilder.newBuilder()
    // 允許JVM在內存不足時回收鍵(使用弱引用)
    .weakKeys()
    // 允許JVM在內存不足時回收值(使用弱引用)
    .weakValues()
    // 允許JVM在內存不足時回收值(使用軟引用)
    .softValues()
    .build(...);

技術細節與抉擇

弱引用:當一個對象只被弱引用指向時,無論當前內存是否充足,在下次 GC 發生時都會被回收。.weakKeys() 和 .weakValues() 適用于緩存數據可以被隨時重建,且希望其生命周期與常規對象引用解耦的場景。

軟引用:當一個對象只被軟引用指向時,只有在 JVM 內存不足(即將發生 OOM)時,才會被回收。.softValues() 曾被用作實現內存敏感緩存的主要方式。

重要警示官方文檔明確不推薦使用 .softValues()。因為:

1)不可預測性:你無法控制這些軟引用值在什么時候被清除。

2)性能開銷:軟引用會給垃圾回收器帶來額外的負擔。

3)交互復雜:與 maximumSize / maximumWeight 一起使用時,行為可能不符合直覺。

最佳實踐:優先使用基于大小和時間的驅逐策略。基于引用的驅逐應被視為一種在特定場景下(如緩存非常大且條目生命周期希望由 GC 管理)的補充手段,而非主要解決方案。

三、 高級實踐與監控

3.1 使用 CacheLoader 的 reload 方法進行異步刷新

expireAfterWrite 會強制數據過期,下次訪問時會發生同步的 load 操作,這可能導致請求阻塞。使用 refreshAfterWrite 結合重寫 reload 方法可以實現異步刷新。

LoadingCache<Key, Graph> cache = CacheBuilder.newBuilder()
    .maximumSize(1000)
    .refreshAfterWrite(1, TimeUnit.MINUTES) // 寫入1分鐘后,下次訪問會觸發刷新
    .build(
        new CacheLoader<Key, Graph>() {
            @Override
            public Graph load(Key key) throws Exception {
                // 同步加載數據
                return getGraphFromDB(key);
            }

            @Override
            public ListenableFuture<Graph> reload(Key key, Graph oldValue) throws Exception {
                // 異步重新加載數據
                return listeningExecutorService.submit(() -> getGraphFromDB(key));
            }
        });

技術細節

refreshAfterWrite 與 expireAfterWrite 不同:在刷新時間點到達后,并不會立即清除舊數據。當有請求訪問時,它會返回舊值,同時異步地觸發 reload 操作來更新緩存。這既能保證數據的相對新鮮,又能避免在刷新時造成的請求延遲尖峰。

? 它非常適合清理那些“可能變冷”的數據,并以一種對用戶透明的方式在后臺更新它們。

3.2 監控與指標:用數據說話

“感覺緩存慢了”是不可靠的。你必須建立有效的監控來評估緩存策略的效果。

Guava Cache 提供了 CacheStats 對象來獲取豐富的統計信息。

CacheBuilder.newBuilder()
    .recordStats() // 必須開啟記錄統計信息
    .build(...);

// 定期獲取并記錄
CacheStats stats = cache.stats();
System.out.println("Hit Rate: " + stats.hitRate());
System.out.println("Eviction Count: " + stats.evictionCount()); // 驅逐總數
System.out.println("Load Exception Count: " + stats.loadExceptionCount());

關鍵監控指標

命中率:這是最重要的指標。理想情況下應保持在 90% 以上。如果命中率低,說明你的緩存策略可能無效,或者緩存容量太小。

驅逐總數:如果這個數值持續快速增長,說明你的緩存空間不足,或者驅逐策略過于激進,大量數據(可能是熱數據)在被充分利用前就被驅逐了。

平均加載時間:如果加載一個新值的時間很長,那么緩存未命中的代價就很高,對命中率的要求也更高。

將這些指標通過 Micrometer, Dropwizard Metrics 等庫接入到你的監控系統(如 Prometheus/Grafana),可以讓你清晰地看到緩存的表現,并為調優提供數據支撐。

四、 總結:構建一個健壯的 Guava Cache 配置

沒有一個放之四海而皆準的配置,但以下模板可以作為你構建一個能有效抵抗冷數據污染的緩存的起點:

public <K, V> LoadingCache<K, V> createRobustCache(CacheLoader<K, V> loader) {
    return CacheBuilder.newBuilder()
        // 第一道防線:限制容量
        .maximumSize(10000)
        // 核心策略:基于時間的主動驅逐
        .expireAfterWrite(30, TimeUnit.MINUTES) // 保證數據新鮮度
        .expireAfterAccess(10, TimeUnit.MINUTES) // 輔助清理冷數據
        // 高級特性:異步刷新
        .refreshAfterWrite(20, TimeUnit.MINUTES)
        // 必備:開啟監控
        .recordStats()
        .build(loader);
}

最終決策流程

1. 必須設置上限:無論是 maximumSize 還是 maximumWeight,這是防止 OOM 的底線。

2. 優先使用時間驅逐:結合業務場景選擇 expireAfterWrite(保新鮮)和 expireAfterAccess(保熱點),通常前者更為重要。

3. 考慮異步刷新:如果數據加載成本高,且可以容忍短暫的數據不一致,使用 refreshAfterWrite 提升性能。

4. 實現顯式無效化:在數據源變更時,主動清理緩存,保持一致性。

5. 建立監控告警:持續觀察命中率和驅逐數,根據數據反饋不斷調整上述參數。

冷數據污染是一個持續的戰斗,而非一勞永逸的配置。通過理解 Guava Cache 的內在機制,并綜合運用以上策略,你可以構建出一個高效、健壯且資源友好的緩存層,使其真正成為應用性能的加速器,而非內存的浪費者。

責任編輯:武曉燕 來源: 程序員秋天
相關推薦

2024-08-29 08:28:17

2025-01-02 10:19:18

2015-06-05 10:21:40

數據中心

2025-05-16 08:53:06

2025-03-27 04:10:00

2023-10-12 19:41:55

2022-09-21 08:16:18

緩存框架

2024-09-19 08:49:13

2024-08-30 09:53:17

Java 8編程集成

2025-11-04 01:30:00

Paimon分布式文件系統

2023-12-04 16:18:30

2024-12-16 00:54:05

2024-11-04 14:09:09

2023-08-30 10:28:02

LRU鏈表區域

2023-08-31 13:36:00

系統預讀失效

2021-06-28 13:34:06

大數據大數據監管數據安全

2023-09-11 07:46:03

Cache2k緩存

2019-12-18 14:24:24

數字化趨勢IT

2024-10-23 16:06:50

2024-07-08 07:30:47

點贊
收藏

51CTO技術棧公眾號

91成人看片片| 99这里只有久久精品视频| 日韩视频在线观看免费| 亚洲天堂av一区二区三区| av片在线观看| 91亚洲资源网| 成人国产精品色哟哟| 久视频在线观看| 欧美禁忌电影| 91精品国产综合久久国产大片| 99久热在线精品视频| 天天av综合网| 国产伦精品一区二区三区视频青涩 | 国产一区二区三区无遮挡 | jizz性欧美10| 久久在线免费观看| 91系列在线观看| 国产成人综合欧美精品久久| 小处雏高清一区二区三区| 亚洲精品国产品国语在线| 久久久久久久久久久久久久久国产| 成人超碰在线| 亚洲视频你懂的| 欧美另类视频在线| www夜片内射视频日韩精品成人| 亚洲综合日韩| 色综合久久中文字幕综合网小说| 精品人妻互换一区二区三区| 91久久偷偷做嫩草影院电| 欧美亚男人的天堂| 日韩中文字幕三区| 一色桃子av在线| 国产精品色眯眯| 久中文字幕一区| 性做久久久久久久久久| 久久99精品久久久久| 国产不卡av在线免费观看| 免费人成在线观看| 天天色综合色| 国产亚洲精品久久久| 国产人妻精品午夜福利免费| 国产69精品久久| 色综合久久久久网| 日本少妇高潮喷水视频| 牛牛精品视频在线| 亚洲欧美综合另类在线卡通| 亚洲黄色成人久久久| 欧美日韩国产综合视频| www.欧美日韩| 国产麻豆日韩| 欧美熟妇另类久久久久久不卡| 狠狠色2019综合网| 成人久久久久爱| 欧美a视频在线观看| 在线亚洲精品| 欧美亚洲一区在线| 探花视频在线观看| 久久精品在线| 国产99视频在线观看| 中文字幕国产在线观看| 免费欧美在线| 国产国产精品人在线视| 在线观看污污网站| 日韩av在线发布| 国产精品免费小视频| 一区二区不卡视频在线观看| 老司机午夜精品| 成人av在线天堂| 99久久精品日本一区二区免费| 国产在线麻豆精品观看| 亚洲尤物视频网| 懂色av成人一区二区三区| 不卡av在线网| 日本在线播放不卡| 午夜在线视频| 一区二区三区四区亚洲| 久激情内射婷内射蜜桃| 亚洲精品**中文毛片| 在线视频欧美精品| 三级一区二区三区| 日韩三级久久| 亚洲国产成人爱av在线播放| 精品无码在线视频| 久久久影院免费| 九九热这里只有精品6| 日韩精品一区三区| 日韩精品一级中文字幕精品视频免费观看 | 影音先锋成人在线电影| 欧美国产日韩视频| 中文字幕视频网站| 精品亚洲免费视频| 国产高清在线一区| 高清av在线| 亚洲黄色尤物视频| 久久精品免费一区二区| 欧美高清免费| 亚洲第一区中文99精品| 国产传媒在线看| 国精品一区二区| 国产精品444| 超碰在线观看99| 国产偷国产偷亚洲高清人白洁 | 国产伦精品一区二区三区在线 | 一级做a爰片久久毛片16| 国产盗摄精品一区二区三区在线| 玛丽玛丽电影原版免费观看1977| 老司机福利在线视频| 欧美日韩一区二区在线播放| www.这里只有精品| 欧美变态网站| 久久精品在线视频| 国产一区二区视频免费| 国产麻豆成人精品| 亚洲精品一区二区三区av| 男女免费观看在线爽爽爽视频| 色婷婷亚洲综合| 日韩黄色一区二区| 国产精品久久久久蜜臀| 欧美在线免费看| 亚洲第一黄色片| 国产精品国产自产拍高清av| 波多野结衣50连登视频| 亚洲国产中文在线二区三区免| 一区二区欧美亚洲| www成人在线| 国产91精品精华液一区二区三区 | 成人av黄色| 欧美性极品少妇| 久久国产精品影院| 影音先锋久久精品| 成人免费91在线看| 动漫一区在线| 欧美欧美欧美欧美首页| 国产精久久一区二区三区| 99精品久久久| 国产伦精品一区二区三区视频孕妇 | 日本一道在线观看| 亚洲精品无播放器在线播放| 亚洲最大在线视频| 国产一区二区视频免费| 久久这里只精品最新地址| 你懂的av在线| 欧美aaaaa级| 97激碰免费视频| 亚洲精品18p| 亚洲午夜电影网| 日本wwwwwww| 狠狠色丁香久久综合频道| 999国内精品视频在线| 成人片在线看| 欧美一区二区三区影视| 久久久久久久麻豆| 国产精品一区二区久久不卡| 国产精品88久久久久久妇女| 国产精品xnxxcom| 久久久精品电影| av手机免费看| 亚洲午夜免费福利视频| 四虎成人免费视频| 亚洲三级影院| 91精品国产综合久久久久久漫画| 91网站免费入口| 视频一区二区三区入口| 日韩欧美精品一区二区三区经典| 中文另类视频| www.亚洲人.com| 国产模特av私拍大尺度| 亚洲午夜在线观看视频在线| 中文字幕一区三区久久女搜查官| 国产欧美久久一区二区三区| 国产精品久久久久久久久男| 亚洲图片88| 欧美一卡2卡3卡4卡| 国产亚洲成人精品| 91免费在线播放| 日日躁夜夜躁aaaabbbb| 亚洲中无吗在线| 国产主播一区二区三区四区| 成人软件在线观看| 久久精品这里热有精品| 人妻与黑人一区二区三区| 欧美性xxxx极品hd欧美风情| 蜜桃av乱码一区二区三区| 精东粉嫩av免费一区二区三区| 50度灰在线观看| 亚洲激情播播| 国产免费亚洲高清| 久草在线新免费首页资源站| 日韩精品在线视频| 91国内精品视频| 亚洲综合色自拍一区| 一女三黑人理论片在线| 麻豆国产91在线播放| av女优在线播放| 欧美在线观看视频一区| 国产伦精品一区二区三区视频黑人| 456亚洲精品成人影院| 久久在线精品视频| 你懂的在线观看| 欧美一区二区三区在| 午夜精品一区二| 一区二区三区日韩| 日本爱爱爱视频| 国产成人在线电影| 成人性做爰aaa片免费看不忠| 亚洲午夜精品一区 二区 三区| 精品人伦一区二区三区| 91成人小视频| 国产aⅴ夜夜欢一区二区三区| av免费网站在线观看| 亚洲欧美国产另类| 亚洲精品一区二区三区新线路| 在线观看日韩av先锋影音电影院| 国产亚洲精品久久久久久无几年桃 | 国产伊人精品在线| av电影一区| 欧美激情视频在线观看| 尤物视频在线免费观看| 日韩国产在线播放| 性猛交xxxx乱大交孕妇印度| 欧美视频中文字幕| 六月丁香激情综合| 亚洲午夜久久久久久久久电影院| 福利视频第一页| 国产欧美日韩久久| 免费成人深夜夜行p站| 粉嫩aⅴ一区二区三区四区| 国产免费中文字幕| 久久国产剧场电影| 国产视频一区二区视频| 国产精品婷婷| 国产精品网站免费| 亚洲国产综合在线看不卡| 国产手机视频在线观看| 99久久影视| 亚洲欧洲日本国产| 精品久久久中文字幕| 欧美日韩视频在线一区二区观看视频| 国产精品玖玖玖在线资源| 99国产超薄肉色丝袜交足的后果| 欧美日韩免费电影| 国产精品久久一区| 蜜桃视频成人m3u8| 国产成人亚洲综合91| 天堂√8在线中文| 欧美在线视频观看| 亚洲三级欧美| 日本精品免费一区二区三区| 香蕉伊大人中文在线观看| 久久人人爽人人爽人人片av高清| 美女尤物在线视频| 欧美精品久久久久| 国产传媒av在线| 欧美在线免费观看| 日韩精品三区| 国产精品国产福利国产秒拍| 成人软件在线观看| 国产精品美女免费视频| 欧美综合影院| 91免费精品国偷自产在线| 日韩精品一区二区三区中文字幕| 999在线免费观看视频| 久本草在线中文字幕亚洲| 免费一区二区三区| 日韩av片子| 无码人妻精品一区二区三区99v| 欧美一区不卡| 日韩欧美一区三区| 日日摸夜夜添夜夜添精品视频| 15—17女人毛片| 国产毛片精品一区| 制服丝袜第二页| 中文字幕电影一区| 成人性生活毛片| 亚洲mv在线观看| 日本黄色中文字幕| 91麻豆精品国产91久久久| 亚洲国产精品一| 日韩毛片在线观看| 色开心亚洲综合| 久久久久久有精品国产| 另类专区亚洲| 亚洲自拍av在线| 秋霞综合在线视频| 一区视频二区视频| 国产在线不卡| 午夜欧美福利视频| 国产成人免费av在线| 美女脱光内衣内裤| 樱桃视频在线观看一区| 无码人妻aⅴ一区二区三区有奶水 无码免费一区二区三区 | 亚洲精品大尺度| 北岛玲一区二区三区| 欧美激情性做爰免费视频| 精品国模一区二区三区| 69堂成人精品视频免费| 蜜臀久久99精品久久一区二区| 这里只有精品66| 亚洲一区二区三区四区五区午夜 | 欧洲亚洲精品久久久久| 激情视频一区二区| 99视频精品全部免费在线视频| www.射射射| 精品影视av免费| 欧美色图亚洲激情| 一个色综合网站| 91精东传媒理伦片在线观看| 亚洲精品国产综合久久| 在线h片观看| 国产精品一区久久久| 色老板在线视频一区二区| 精品国产三级a∨在线| 日韩国产精品久久久久久亚洲| 国产人妖在线观看| ㊣最新国产の精品bt伙计久久| 国产黄色免费观看| 精品久久国产老人久久综合| 在线视频三区| 日本精品中文字幕| 精品国内亚洲2022精品成人| 一级特黄妇女高潮| 蓝色福利精品导航| 调教驯服丰满美艳麻麻在线视频| 亚洲v中文字幕| 精品人妻久久久久一区二区三区| 中文在线不卡视频| 高清av不卡| 久久国产欧美精品| 国产日韩欧美一区| 久久久久亚洲AV成人网人人小说| 亚洲欧洲韩国日本视频| 一级片免费观看视频| 中日韩美女免费视频网址在线观看 | 亚洲欧美日韩国产另类专区| 懂色av蜜臀av粉嫩av喷吹| 国产婷婷成人久久av免费高清| 丁香花在线电影小说观看| 亚洲资源在线看| 中文字幕一区二区三三| a级大片免费看| 亚洲欧美日本在线| 成人激情四射网| 欧美精品久久久久久久久| 福利在线一区| 免费av手机在线观看| 成人美女视频在线看| 久久亚洲成人av| 精品电影一区二区三区| 免费在线看电影| 国产在线精品一区| 亚洲一区不卡| www.99热| 欧美久久久久中文字幕| 国产淫片在线观看| 成人免费在线看片| 亚洲精品美女91| 国产精品1000部啪视频| 色婷婷一区二区| 日韩av中文| 97人人做人人人难人人做| 亚洲福利一区| 日韩精品电影一区二区| 精品视频一区 二区 三区| 欧美激情午夜| 成人av免费在线看| 国产精品五区| 久久午夜精品视频| 日韩亚洲欧美在线观看| 波多野在线观看| 欧洲在线视频一区| 久久精品99国产国产精| 国产suv一区二区三区| 精品毛片乱码1区2区3区| а√天堂8资源中文在线| 欧美亚洲免费在线| 久久99久国产精品黄毛片色诱| 九九九久久久久| 亚洲男女性事视频| 亚洲18在线| 久操网在线观看| 亚洲国产高清不卡| 亚洲经典一区二区| 国产成+人+综合+亚洲欧洲| 国产韩日影视精品| 理论片大全免费理伦片| 欧美少妇bbb| 成人影音在线| 亚洲欧美日韩国产成人综合一二三区 | 国产精品久久久久久久久快鸭| 精品人妻午夜一区二区三区四区 | 成人在线免费观看av| 国产精品理伦片| 深爱五月激情五月| 国产精品亚洲综合天堂夜夜| 黄色成人av网站| 国产91丝袜美女在线播放| 精品少妇一区二区三区在线视频| 欧美电影网站| 国产xxxx振车| 国产精品白丝在线|