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

多級緩存架構:深度解析與實踐

開發 架構
常見的多級緩存架構為本地緩存 + 分布式緩存(Redis)+ 數據庫(DB),足以滿足大部分場景;若需支撐更高量級查詢,可將緩存進一步前置。

一、多級緩存架構概述

  • 在互聯網電商場景中,由于讀、寫請求量級大且響應時間(RT)要求低,多級緩存架構旨在提升讀請求性能。
  • 緩存本質是數據冗余,將數據逐層冗余放置在離用戶更近、速度更快但容量更小、價格更貴的存儲系統上,以提高系統訪問性能。
  • 常見的多級緩存架構為本地緩存 + 分布式緩存(Redis)+ 數據庫(DB),足以滿足大部分場景;若需支撐更高量級查詢,可將緩存進一步前置。

性能瓶頸

  • DB層:性能瓶頸在于磁盤讀取的磁盤IO,將數據移至內存中的Redis可提升性能。
  • Redis層:性能受限于網絡IO,JVM應用請求Redis時需發起IO請求,使用JVM本地緩存可減少此消耗。
  • JVM本地緩存層:性能受限于Tomcat服務器,單個服務器處理并發請求有限,可通過增加Tomcat服務數量(如K8s多Pod部署)或把緩存前置到Nginx提升性能。
  • Nginx層:Nginx是高性能Web服務器,單機處理并發請求量可達數萬,可選擇在Nginx本地內存存儲部分數據或通過Lua腳本訪問Redis數據;使用兩層Nginx架構,接入層Nginx負責流量分發,應用層Nginx處理業務邏輯和熱點緩存讀取。
  • 緩存層次并非越多越好,需根據實際情況選擇,互聯網常用多級緩存為JVM本地緩存 + Redis緩存,對于極熱點數據可采用Nginx + JVM本地緩存 + Redis緩存三級架構。
  • JVM緩存存放熱點數據,避免其使Redis分片崩潰,但僅在查詢Redis數據時將數據放入本地緩存會導致命中率不高,通常需要熱點探測系統將熱點數據放入JVM本地緩存,許多大廠都有自研熱點探測系統,如得物的Burning、京東的hotkey。

二、多級緩存請求流程

圖片圖片

  • 用戶請求進入接入層Nginx后,會被負載均衡算法分發到各應用層Nginx。
  • 在應用層Nginx上,先讀取本地緩存,減少對后端服務沖擊;
  • 若未命中,則讀取Redis緩存,以減輕Tomcat集群壓力;
  • 若Redis緩存未命中,進入JVM應用層,先讀取JVM本地內存;
  • 若JVM本地內存未命中,訪問Redis集群;
  • 若Redis集群未命中,最后訪問DB。

多級緩存架構應用可根據實際情況逐步完善,初始使用DB,DB有瓶頸時添加Redis,Redis無法支撐時將熱數據放至JVM本地內存,JVM內存也無法支撐時,將緩存前置到Nginx層。

簡單示例:

public class MultiLevelCache {
    private Cache<String, String> jvmCache;
    private Jedis redis;

    public MultiLevelCache() {
        jvmCache = Caffeine.newBuilder()
             .maximumSize(100)
             .build();
        redis = new Jedis("localhost", 6379);
    }

    public String getProductName(String productId) {
        // 首先嘗試從 JVM 本地緩存獲取
        String productName = jvmCache.getIfPresent("product:" + productId + ":name");
        if (productName == null) {
            // 若 JVM 本地緩存未命中,嘗試從 Redis 緩存獲取
            productName = redis.get("product:" + productId + ":name");
            if (productName!= null) {
                // 將 Redis 中命中的數據更新到 JVM 本地緩存
                jvmCache.put("product:" + productId + ":name", productName);
            } else {
                // 若 Redis 緩存未命中,從數據庫獲取
                productName = fetchFromDatabase(productId);
                if (productName!= null) {
                    // 將數據存儲到 Redis 緩存
                    redis.set("product:" + productId + ":name", productName);
                    // 同時存儲到 JVM 本地緩存
                    jvmCache.put("product:" + productId + ":name", productName);
                }
            }
        }
        return productName;
    }

    private String fetchFromDatabase(String productId) {
        // 模擬從數據庫讀取數據,這里使用 MySQL 示例代碼
        MySQLDataAccess mySQLDataAccess = new MySQLDataAccess();
        return mySQLDataAccess.fetchProductName(productId);
    }

    public static void main(String[] args) {
        MultiLevelCache cache = new MultiLevelCache();
        String productName = cache.getProductName("1");
        System.out.println("Product Name: " + productName);
    }
}
class MySQLDataAccess {
    private static final String JDBC_URL = "jdbc:mysql://localhost:3306/your_database";
    private static final String JDBC_USER = "username";
    private static final String JDBC_PASSWORD = "password";

    public String fetchProductName(String productId) {
        String productName = null;
        try (Connection connection = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD)) {
            String query = "SELECT name FROM products WHERE id =?";
            try (PreparedStatement preparedStatement = connection.prepareStatement(query)) {
                preparedStatement.setInt(1, Integer.parseInt(productId));
                try (ResultSet resultSet = preparedStatement.executeQuery()) {
                    if (resultSet.next()) {
                        productName = resultSet.getString("name");
                    }
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return productName;
    }
}

三、負載均衡算法的選擇

  • 常用負載均衡算法:

輪詢:優勢在于負載均衡,但相同請求會被轉發到不同節點,節點增多時緩存命中率會降低。

一致性哈希:相同請求會路由到同一臺機器,節點宕機僅會使少量緩存數據失效,但會導致大量請求集中在某臺機器。

  • 算法選擇依據:負載較低時,更追求緩存命中率,可使用一致性哈希;負載較高時,對熱點數據訪問多,更希望請求平均分散,不建議使用一致性哈希,可選擇輪詢,避免如Redis Cluster中使用一致性哈希時節點掛掉引發的雪崩問題。

四、應用層Nginx本地緩存實現

圖片圖片

  • 可使用Lua Shared Dict實現,這是OpenResty提供的功能,OpenResty集成了Nginx和Lua,可開發業務邏輯進行熱點數據的查詢和獲取。
  • 通過Nginx + Lua可從Nginx本地內存或遠程Redis獲取數據。
  • 應用層Nginx處理第一層數據并存儲熱點數據,會將請求上報到熱點發現系統進行統計,熱點數據還可放在JVM本地緩存。
  • 互聯網公司的熱點數據探測系統,如京東的hotkey,主要用于探測MySQL、Redis中頻繁訪問數據,避免因惡意攻擊、爬蟲請求、機器人導致的熱點數據使Redis分片癱瘓。以往使用JVM本地緩存 + Redis緩存的二級緩存方式,對于熱點數據命中率較低,因此需要統一熱點key探測方案,將熱點數據推送到JVM本地緩存。
  • 京東 hotkey:https://mp.weixin.qq.com/s/xOzEj5HtCeh_ezHDPHw6Jw
  • 得物 Burning:https://tech.dewu.com/article?id=23

簡單示例:

-- 在 Nginx 配置文件中
http {
    lua_shared_dict my_cache 10m;  -- 定義一個 10MB 的共享字典

    server {
        location /cache {
            content_by_lua_block {
                local cache = ngx.shared.my_cache
                local key = ngx.var.arg_key
                local value = cache:get(key)
                if value == nil then
                    -- 從 Redis 獲取數據
                    local redis = require "resty.redis"
                    local red = redis:new()
                    red:connect("localhost", 6379)
                    value = red:get(key)
                    red:close()
                    if value ~= nil then
                        cache:set(key, value)  -- 將數據存儲到本地緩存
                    end
                end
                ngx.say(value)
            }
        }
    }
}

五、數據緩存優化

  • 緩存數據過期時間:

設置過期時間:適合熱點、易更新數據,如庫存數據,可短時間允許不一致。

不設置過期時間:適合非熱點、長期訪問數據,如用戶信息、店鋪信息等。

  • 緩存數據淘汰:
  • 對于設置過期時間的數據到期自動刪除,不設置過期時間的數據,當緩存空間滿時,需通過淘汰策略刪除。
  • 淘汰策略有LRU(根據訪問時間淘汰最久未訪問數據,但大批量數據訪問會使命中率下降)、LFU(根據訪問頻率淘汰最不常訪問數據,數據訪問內容變化大時命中率會下降)、ARC(結合LRU和LFU優點)。
  • 緩存加載和更新:可使用緩存旁路模式,先寫數據庫,再寫緩存;更新時先更新數據庫,再刪除緩存。
  • 增量化緩存重建:對于復雜數據,緩存重建成本高,可通過維度劃分和根據增量數據變更僅重建對應維度緩存,降低重建成本,如對商品的不同維度信息(基礎信息、圖片等)進行劃分,按更新維度重建緩存。

六、緩存數據一致性保證

  • 多級緩存的特性差異:分布式緩存Redis中一份數據只存儲一次,可存儲較多數據;JVM緩存中熱點數據在每個節點存儲,且本地緩存容量小,存儲少量數據,因此更新策略不同。
  • Redis數據一致性:

同步刪除緩存數據 - 旁路緩存策略:讀場景:先從緩存讀取,命中則返回,未命中從數據庫讀取;寫場景:先更新數據庫,再失效緩存,能滿足大部分場景的數據一致性,但在極端情況(讀寫操作時序錯亂)下會出現數據不一致問題。

同步刪除緩存數據 - 延時雙刪:兩次刪除緩存,第一次快速達到最終一致性,第二次延時刪除可能的臟數據;需考慮延時時間設置(大于讀操作時間 + 數據庫主從同步延時時間),可使用異步線程執行第二次刪除,但存在延時時間不準確和性能消耗問題。

異步刪除緩存數據 - 基于binlog實現:如阿里巴巴的Canal監聽binlog實現緩存更新,Canal模擬MySQL從庫,接收主庫binlog,Server解析存儲,客戶端與Server通信獲取binlog;

Canal 1.1.1版本后支持將binlog投遞至MQ,可多客戶端消費,實現大量數據的緩存更新;但對于大多數場景,使用緩存旁路策略已足夠,引入Canal會使架構復雜且增加維護成本。

簡單示例:

public class RedisCacheConsistency {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
        String key = "product:1:price";
        // 先更新數據庫(這里省略數據庫更新代碼)
        // 立即刪除緩存
        jedis.del(key);
        // 延時 500 毫秒后再次刪除緩存,確保臟數據清除
        new Thread(() -> {
            try {
                TimeUnit.MILLISECONDS.sleep(500);
                jedis.del(key);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
        jedis.close();
    }
}
  • 本地緩存數據一致性:

對于少量熱點數據,可采用主動更新 + 過期時間的方式刷新本地緩存。

對于不同更新頻率的數據,可設置不同過期時間并配合定時任務刷新,如不易變化的數據可設置過期時間為30min,配合1min更新一次的定時任務;變化頻繁的數據可設置過期時間為1min,配合30ms更新一次的定時任務。

可使用本地雙緩存策略,創建兩份過期時間不同的本地緩存,第一份寫后30min過期,第二份讀寫后40min過期;讀寫操作以第一份緩存為主,第一份過期后可從第二份讀取,同時更新第一份緩存,第二份作為備用。

             本地雙緩存刷新通過定時任務完成,檢查緩存數據失效后從遠程獲取數據并放入雙緩存。

  • 緩存最終一致性的保證:設置緩存過期時間,最終會刪除緩存,達到最終一致性;軟件工程中無法保證絕對一致性,如Linux的PageCache在服務器異常關機時會有數據丟失,軟件層面更難避免數據不一致。

簡單示例:

public class LocalCacheConsistency {
    // 本地緩存
    private Cache<String, String> cache;
    // 模擬的數據庫訪問服務
    private DatabaseService databaseService;
    // 定時任務執行器
    private ScheduledExecutorService executorService;

    public LocalCacheConsistency() {
        // 初始化本地緩存,設置最大容量和過期時間
        cache = Caffeine.newBuilder()
              .maximumSize(100)
              .expireAfterWrite(1, TimeUnit.MINUTES)
              .build();
        databaseService = new DatabaseService();
        // 創建定時任務執行器
        executorService = Executors.newSingleThreadScheduledExecutor();
        // 啟動定時刷新任務
        startCacheRefreshTask();
    }

    // 從本地緩存獲取數據
    public String get(String key) {
        return cache.getIfPresent(key);
    }

    // 存儲數據到本地緩存
    public void put(String key, String value) {
        cache.put(key, value);
    }

    // 從數據庫獲取數據并更新本地緩存
    public void refreshCache(String key) {
        String value = databaseService.fetchData(key);
        if (value!= null) {
            cache.put(key, value);
        }
    }

    // 啟動定時刷新緩存任務
    private void startCacheRefreshTask() {
        executorService.scheduleAtFixedRate(() -> {
            // 這里可以根據實際情況選擇要刷新的緩存鍵,例如全部刷新或只刷新部分熱點鍵
            // 這里假設我們要刷新所有緩存鍵,你可以修改為更具體的邏輯
            refreshAllCacheKeys();
        }, 0, 30, TimeUnit.SECONDS); // 每 30 秒刷新一次
    }

    // 刷新所有緩存鍵
    private void refreshAllCacheKeys() {
        // 假設緩存鍵的前綴是 "product:",這里可以根據具體業務進行修改
        for (int i = 1; i <= 100; i++) {
            String key = "product:" + i;
            refreshCache(key);
        }
    }

    // 模擬的數據庫服務
    private static class DatabaseService {
        public String fetchData(String key) {
            // 這里可以實現具體的數據庫查詢邏輯,這里僅作模擬
            System.out.println("Fetching data from database for key: " + key);
            return"Value for " + key;
        }
    }
}

七、最后

在實際使用中,需從業務場景、數據不一致時間、實現成本和維護成本等多方面評估并選擇合適方案,通過壓測和實驗對比優劣。

責任編輯:武曉燕 來源: 一安未來
相關推薦

2022-06-13 10:23:34

Helios緩存服務端

2025-08-08 07:09:58

2024-09-19 08:49:13

2024-08-30 09:53:17

Java 8編程集成

2013-04-07 17:57:16

SDN網絡架構

2024-05-06 00:00:00

GAC代碼緩存

2025-09-01 08:28:41

2025-11-04 01:30:00

Paimon分布式文件系統

2023-12-04 16:18:30

2016-08-23 10:50:50

WebJavascript緩存

2010-11-25 09:37:14

MySQL查詢緩存機制

2023-05-05 06:13:51

分布式多級緩存系統

2024-07-08 07:30:47

2025-05-12 01:33:00

異步函數Promise

2025-08-11 02:00:00

2019-10-21 09:32:48

緩存架構分層

2024-11-18 16:15:00

2025-05-07 03:22:00

2025-01-02 10:19:18

2009-07-30 09:23:53

Java JNI
點贊
收藏

51CTO技術棧公眾號

日b视频免费观看| 日韩免费在线看| 无码人妻精品一区二区三| 97人澡人人添人人爽欧美| 久久青草国产手机看片福利盒子 | 国产99久久久国产精品| 午夜伦理精品一区 | 亚洲卡通动漫在线| 激情伦成人综合小说| 久久久久精彩视频| 在线国产日韩| 色老头一区二区三区| 佐佐木明希电影| 欧美一区久久久| 亚洲精品videosex极品| 欧美另类一区| 性猛交xxxx乱大交孕妇印度| 久久久久久一区二区| 另类视频在线观看| 人妻少妇无码精品视频区| 麻豆国产一区| 在线精品国精品国产尤物884a| 日本三日本三级少妇三级66| 看电影就来5566av视频在线播放| 国产宾馆实践打屁股91| 国产精品亚发布| 91精品国产综合久久久蜜臀九色| 亚洲人成免费网站| 一本色道久久综合狠狠躁篇怎么玩| 国产精久久久久| 国产精品天天av精麻传媒| 三上悠亚影音先锋| 香蕉免费一区二区三区在线观看 | 亚洲色成人www永久网站| 欧美va天堂在线| 日韩在线视频国产| 久久精品一区二区免费播放| www.爱久久| 欧美一区二区二区| 久久国产这里只有精品| 一本大道色婷婷在线| 亚洲综合成人在线视频| 欧美亚洲视频一区| 日本不卡三区| 欧美韩国日本不卡| 日韩国产精品一区二区| 你懂得网站在线| 99国产精品久久久久| 国产精品香蕉视屏| 欧美一级特黄aaaaaa| 成人在线一区二区三区| 产国精品偷在线| 国产成人av免费看| 国产成人啪免费观看软件| 亚洲www在线观看| 国产精品爽爽久久久久久| 蜜臀av亚洲一区中文字幕| 国产精品com| 黄色大全在线观看| 美女视频黄 久久| 99热这里只有精品8| 在线电影欧美日韩一区二区私密| 免费在线观看你懂的| 人体久久天天| 精品亚洲精品福利线在观看| 网站免费在线观看| 同性恋视频一区| 日韩精品在线影院| 亚洲午夜福利在线观看| 国产99亚洲| 亚洲一级片在线看| 快灬快灬一下爽蜜桃在线观看| 欧美亚洲精品在线| 日韩中文在线中文网三级| 任我爽在线视频| 亚洲高清影视| 欧美精品videosex性欧美| 日本熟妇毛耸耸xxxxxx| 国产一区二区三区的电影| 日本中文字幕不卡免费| 中国女人一级一次看片| 国精品**一区二区三区在线蜜桃| 91沈先生在线观看| 丰满少妇被猛烈进入| 99re在线精品| 亚洲欧美日韩国产成人综合一二三区| 欧美被日视频| 亚洲国产一二三| av动漫在线观看| 国产精品亲子伦av一区二区三区| 91精品国产91久久久久久最新毛片 | 成人国产精品色哟哟| 精品人妻一区二区三区三区四区| 成人高清免费观看| 日韩电影在线播放| 18+视频在线观看| 欧美性极品少妇精品网站| 在线观看av日韩| 亚洲3区在线| 精品视频偷偷看在线观看| 久久久久无码精品国产sm果冻| 99久久亚洲精品蜜臀| 97在线日本国产| 亚洲一区精品在线观看| av日韩在线网站| 一区二区三区四区欧美日韩| 成年人视频免费在线播放| 在线观看视频一区二区| 2018国产精品| 欧美丝袜丝交足nylons172| 久久久久成人网| 一区二区视频免费| 99re视频精品| 男人天堂网站在线| 91国内外精品自在线播放| 精品久久国产字幕高潮| 乱老熟女一区二区三区| 午夜一区在线| av一区二区三区四区电影| 精华区一区二区三区| 亚洲成人高清在线| 1314成人网| 成人精品视频| 欧美中文在线字幕| 丰满大乳国产精品| 亚洲欧洲精品一区二区三区不卡| 久久无码高潮喷水| 国产精品白浆| 欧美激情亚洲激情| 国产乱子伦精品无码码专区| 国产欧美一区二区三区在线老狼 | 三级黄色在线观看| 水野朝阳av一区二区三区| 激情五月综合色婷婷一区二区 | 午夜精品久久久99热福利| 国产又粗又猛又爽又黄视频| 久久蜜桃av一区精品变态类天堂| 久久人人爽人人爽人人av| 国产精品久久久久久久久久辛辛 | 9l视频自拍9l视频自拍| 精品123区| 亚洲欧洲黄色网| 亚洲黄色小说图片| 99综合电影在线视频| 国产精品无码免费专区午夜| 久久wwww| 久久成人人人人精品欧| 国产精品无码专区av免费播放| 国产精品视频一区二区三区不卡| 久久综合久久色| 国产成人精品三级高清久久91| 69精品小视频| 无码国产色欲xxxx视频| 婷婷国产v国产偷v亚洲高清| 欧美大喷水吹潮合集在线观看| 亚洲天堂激情| 国产综合精品一区二区三区| а√在线天堂官网| 亚洲精品www久久久久久广东| 国产成人亚洲精品自产在线| 99国内精品久久| 欧美三级午夜理伦三级| 欧美日韩在线观看视频小说| 国产精品久久久久久中文字| 在线观看av黄网站永久| 欧美精品色一区二区三区| a在线视频播放观看免费观看| 国产一区日韩二区欧美三区| 国内外成人激情免费视频| 欧美.com| 97视频在线观看免费高清完整版在线观看 | 久久精品噜噜噜成人av农村| 尤物一区二区三区| 国产日韩欧美中文在线| 久久综合国产精品台湾中文娱乐网| 国产乱人乱偷精品视频a人人澡| 一区二区三区欧美日韩| 亚洲欧美日韩偷拍| 亚洲欧美不卡| 先锋在线资源一区二区三区| 91精品国产色综合久久不卡粉嫩| 欧美夫妻性视频| 青青操视频在线| 欧美色网站导航| 国产免费无码一区二区视频 | 国产在线精品一区| av有声小说一区二区三区| 在线视频免费一区二区| 国产女人18毛片18精品| 精品福利在线视频| 欧美老女人性生活视频| 成人综合婷婷国产精品久久| 午夜精品久久久内射近拍高清| 日韩欧美高清| 国产精品视频福利| 欧美日韩精品一区二区三区视频| 久久精品国产亚洲精品2020| 日本高清视频在线| 欧美系列在线观看| 久久久久久久久久久久久久久久久| 国产成人丝袜美腿| www.欧美日本| 欧美三级午夜理伦三级中文幕| 欧美成人在线免费观看| 久久av偷拍| 国产999精品久久久影片官网| 91cn在线观看| 一本大道久久加勒比香蕉| 国产刺激高潮av| 欧美日韩成人激情| 亚洲另类欧美日韩| 亚洲欧美日韩久久| 亚洲精品视频久久久| 成人一区二区三区视频| 国产福利在线免费| 久久国产成人| 国产av天堂无码一区二区三区| 国产精品99在线观看| 免费成人在线观看av| 一区二区三区四区高清视频| 国产精品视频大全| 中日韩脚交footjobhd| 日韩最新在线视频| 欧美一级特黄aaaaaa| 日韩一区二区三区免费看 | 日本不卡网站| 久国内精品在线| 久久精品视频免费看| 亚洲午夜久久久久久久| 日日躁夜夜躁白天躁晚上躁91| 91精品国产综合久久久久久久久久| 日本a级c片免费看三区| 午夜精品福利一区二区三区av| 91aaa在线观看| 亚洲欧美日韩在线| 欧美爱爱免费视频| 国产精品视频观看| 免费黄色片网站| 国产偷国产偷亚洲高清人白洁| 四虎永久免费影院| 成人国产精品视频| 欧美午夜精品一区二区| 国产真实精品久久二三区| 成 人 黄 色 小说网站 s色| 肉色丝袜一区二区| 97xxxxx| 欧美一级二区| 国产成人亚洲精品无码h在线| 亚洲狼人精品一区二区三区| 日韩伦理在线免费观看| 亚洲午夜激情在线| 成人性免费视频| av成人国产| 人妻有码中文字幕| 翔田千里一区二区| 18岁视频在线观看| 喷白浆一区二区| 国产高清999| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 亚洲综合影视| 欧美猛交免费看| 在线不卡日本v二区707| 欧美精品精品精品精品免费| 国产精品25p| 国产精品草莓在线免费观看| 韩国成人在线| 91午夜理伦私人影院| 视频国产精品| 美女一区视频| 日韩亚洲一区在线| 国产免费xxx| 亚洲精品婷婷| av丝袜天堂网| 韩国三级在线一区| 91人人澡人人爽| 91污在线观看| 最近中文字幕在线mv视频在线| 国产欧美精品一区二区色综合朱莉| 欧美xxxooo| 亚洲地区一二三色| 蜜臀精品一区二区三区| 欧美老年两性高潮| 老牛影视av牛牛影视av| 亚洲人成77777在线观看网| 中文字幕日本在线| 欧美高清视频在线观看| 亚洲精品成人图区| 亚洲aaa激情| 欧美一区二区三区久久| 亚洲欧美日韩另类精品一区二区三区 | 日本少妇bbwbbw精品| 色婷婷综合久久久中文字幕| 亚洲中文一区二区三区| 亚洲国产天堂久久综合网| 国产精品ⅴa有声小说| 久久国产精品久久久久久| 久草在线资源福利站| 国产美女精彩久久| 欧美一级三级| 偷拍盗摄高潮叫床对白清晰| 99亚洲一区二区| 不卡中文字幕在线观看| 93久久精品日日躁夜夜躁欧美| 美女网站视频色| 午夜激情综合网| 91影院在线播放| 亚洲精品自拍第一页| 中文字幕有码在线视频| 国产成人亚洲综合91| 中文字幕亚洲在线观看| 亚洲二区自拍| 亚洲男人影院| 香蕉视频免费网站| 最新日韩在线视频| 日韩乱码一区二区三区| 日韩电影网在线| 丝袜在线视频| 成人av在线天堂| 欧美极品中文字幕| 成人性生活视频免费看| 激情文学综合丁香| 一级肉体全黄裸片| 欧美日韩免费观看中文| 亚洲成人黄色片| 久久综合电影一区| 亚洲精品成人一区| 亚欧精品在线| 日韩不卡一区二区三区| 亚洲第一页av| 精品福利一区二区| 日韩在线观看视频一区| 欧美成人免费视频| 国产成人免费av一区二区午夜| 亚洲国产婷婷香蕉久久久久久99| 性伦欧美刺激片在线观看| 成人性生活免费看| 亚洲电影中文字幕在线观看| www.国产欧美| 欧美成人激情在线| 精品视频一二| 第九区2中文字幕| 国产乱码精品一品二品| 久久久久久久久久97| 欧美久久一区二区| 韩日在线视频| 国产精品第三页| 成人免费看片39| 日韩欧美国产片| 中文字幕在线一区免费| 97caocao| 色综合老司机第九色激情| www国产精品| 国产精品无码一区二区在线| 99久久精品免费| 国产高清中文字幕| 亚洲天堂av高清| 日韩国产一二三区| 国产经典久久久| 成人精品gif动图一区| 日韩精品一区三区| 国产婷婷97碰碰久久人人蜜臀| 在线观看欧美日韩电影| 欧美一区二区福利| 久久精品99国产国产精| 小泽玛利亚一区二区免费| 精品人伦一区二区色婷婷| 丁香高清在线观看完整电影视频| 精品久久中出| 日韩福利视频导航| 波多野结衣久久久久| 精品国产一区二区三区四区四| 美女视频在线免费| 日韩高清dvd| 国产精品99久久久久久似苏梦涵 | 亚洲另类黄色| 免费成人深夜天涯网站| 69久久99精品久久久久婷婷| 美女航空一级毛片在线播放| 久久精品第九区免费观看| 日本不卡视频在线观看| 激情五月少妇a| 亚洲欧美国产va在线影院| 祥仔av免费一区二区三区四区| 国产高清不卡无码视频| 久久久精品综合| jizz中国女人| 日韩av电影院| 欧美一区视频| 蜜桃精品一区二区| 69久久夜色精品国产69蝌蚪网| 人狥杂交一区欧美二区| 在线观看免费91| 99精品国产视频| 国产免费一区二区三区最新不卡 | 91国视频在线| 亚洲欧洲日产国码二区| 天堂中文在线资| 91中文字幕在线观看| 午夜一区在线| 久久久久亚洲av成人片|