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

設計本地緩存、Redis與數據庫的三層架構:一致性協議與過期策略實踐

數據庫 Redis
實際實施中,需要根據具體業務特點調整策略參數,如TTL時長、延遲刪除時間等。同時,完善的監控和日志記錄對于排查問題和優化系統至關重要。

在現代分布式系統中,為了平衡性能與數據一致性,采用本地緩存、分布式緩存(如Redis)和數據庫的三層架構是一種常見方案。這種架構能夠顯著降低數據庫壓力并提高響應速度,但同時也帶來了數據一致性和過期策略的設計挑戰。本文將深入探討如何設計這樣一個系統,確保數據在多層級之間保持一致性,并有效管理數據的生命周期。

1. 架構概述與挑戰

在我們開始設計之前,先明確三層架構的基本組成:

本地緩存:應用進程內的緩存(如Caffeine、Ehcache),訪問速度最快,但無法跨進程共享

分布式緩存(Redis):作為中央緩存層,被所有應用實例共享,速度較快

數據庫:數據的持久化存儲,作為最終的數據源

這種架構帶來的主要挑戰有:

  • 如何保證本地緩存與Redis之間的數據一致性?
  • 如何保證Redis與數據庫之間的數據一致性?
  • 如何設計有效的過期策略,避免陳舊數據提供服務?
  • 如何處理緩存穿透、擊穿和雪崩問題?

2. 一致性協議設計

2.1 寫操作的一致性保障

當數據需要更新時,我們必須謹慎處理三層之間的數據同步。以下是推薦的寫操作流程:

public class DataService {
    private LocalCache localCache;
    private RedisClient redisClient;
    private Database db;
    
    public void updateData(String key, Object value) {
        // 1. 先更新數據庫(最終權威數據源)
        db.update(key, value);
        
        // 2. 刪除Redis中的緩存(而不是更新)
        redisClient.delete(key);
        
        // 3. 刪除本地緩存
        localCache.delete(key);
    }
}

為什么選擇刪除緩存而不是更新緩存?這基于一個簡單但重要的觀察:刪除操作是冪等的,而更新操作不是。在多實例環境中,多個應用實例可能以不同的順序收到更新消息,直接更新緩存可能導致數據順序錯亂,而刪除操作確保了下次讀取時會從數據庫加載最新數據。

2.2 讀操作的一致性保障

讀操作需要遵循"緩存優先"的原則,但要有適當的回退機制:

public Object readData(String key) {
    // 1. 首先嘗試從本地緩存獲取
    Object value = localCache.get(key);
    if (value != null) {
        return value;
    }
    
    // 2. 本地緩存未命中,嘗試從Redis獲取
    value = redisClient.get(key);
    if (value != null) {
        // 將數據存入本地緩存
        localCache.set(key, value, LOCAL_TTL);
        return value;
    }
    
    // 3. Redis未命中,從數據庫獲取
    value = db.query(key);
    if (value != null) {
        // 更新Redis緩存
        redisClient.set(key, value, REDIS_TTL);
        // 更新本地緩存
        localCache.set(key, value, LOCAL_TTL);
    }
    
    return value;
}

2.3 數據庫與Redis的最終一致性

為了確保數據庫與Redis之間的最終一致性,可以考慮使用以下額外機制:

2.3.1 數據庫binlog監聽

對于重要數據,可以通過監聽數據庫的binlog變化來觸發緩存失效:

public class BinlogListener {
    public void onDataUpdate(String table, String key, Object newValue) {
        // 當數據庫更新時,刪除相關緩存
        redisClient.delete(key);
        // 發送消息通知所有實例清除本地緩存
        messageQueue.send(new CacheEvictMessage(key));
    }
}

2.3.2 延遲雙刪策略

在高并發場景下,即使先更新數據庫再刪除緩存,仍可能存在短暫的數據不一致窗口。延遲雙刪策略可以緩解這個問題:

public void updateDataWithDoubleDelete(String key, Object value) {
    // 第一次刪除緩存
    redisClient.delete(key);
    localCache.delete(key);
    
    // 更新數據庫
    db.update(key, value);
    
    // 延遲指定時間后再次刪除緩存
    scheduledExecutor.schedule(() -> {
        redisClient.delete(key);
        // 發送消息通知所有實例清除本地緩存
        messageQueue.send(new CacheEvictMessage(key));
    }, 1000, TimeUnit.MILLISECONDS); // 延遲1秒
}

延遲時間需要根據實際業務讀寫耗時調整,通常略大于一次讀操作耗時。

3. 過期策略設計

合理的過期策略是保證數據新鮮度和系統性能的關鍵。

3.1 本地緩存過期策略

本地緩存應當設置較短的TTL(Time-To-Live),建議在1-5分鐘之間,這可以在數據一致性和性能之間取得良好平衡。

// 使用Caffeine配置本地緩存
Cache<String, Object> localCache = Caffeine.newBuilder()
    .expireAfterWrite(2, TimeUnit.MINUTES) // 寫入2分鐘后過期
    .maximumSize(10000) // 限制最大容量
    .build();

短TTL的優勢在于:

  1. 1. 保證數據相對新鮮
  2. 2. 即使出現不一致,也會在較短時間內自動修復
  3. 3. 避免本地緩存占用過多內存

3.2 Redis緩存過期策略

Redis緩存可以設置較長的TTL,建議在30分鐘到24小時之間,具體取決于業務需求和數據變更頻率。

// 設置Redis緩存,30分鐘過期
redisClient.setex(key, 30 * 60, value);

對于不常變更的數據,可以設置更長的過期時間,甚至考慮使用"永久"緩存,通過主動刪除管理生命周期。

3.3 主動刷新策略

對于熱點數據,可以采用主動刷新策略,在緩存過期前異步刷新數據:

public class CacheWarmUpScheduler {
    public void scheduleRefresh() {
        scheduledExecutor.scheduleAtFixedRate(() -> {
            // 獲取熱點key列表
            Set<String> hotKeys = getHotKeys();
            for (String key : hotKeys) {
                // 異步刷新
                CompletableFuture.runAsync(() -> {
                    Object value = db.query(key);
                    if (value != null) {
                        redisClient.set(key, value, REDIS_TTL);
                    }
                });
            }
        }, 0, 5, TimeUnit.MINUTES); // 每5分鐘執行一次
    }
}

3.4 分級過期策略

不同重要性的數據可以采用不同的過期策略:

  • 極高重要性數據(如商品價格):短TTL(1-5分鐘)+ 主動刷新 + 實時失效
  • 一般重要性數據(如用戶信息):中等TTL(30-60分鐘)+ 延遲雙刪
  • 低重要性數據(如文章內容):長TTL(數小時至數天)+ 懶刷新

4. 特殊情況處理

4.1 緩存穿透

緩存穿透是指查詢一個不存在的數據,由于緩存中不命中,導致每次請求都直達數據庫。

解決方案:

  • 緩存空值:對于查詢結果為null的key,也進行緩存,但設置較短的TTL(1-5分鐘)
  • 布隆過濾器:在緩存層之前使用布隆過濾器判斷key是否存在
public Object readDataWithProtection(String key) {
    // 使用布隆過濾器判斷key是否存在
    if (!bloomFilter.mightContain(key)) {
        return null; // 肯定不存在
    }
    
    // 正常緩存查詢流程
    Object value = localCache.get(key);
    if (value != null) {
        if (value instanceof NullValue) { // 空值標記
            return null;
        }
        return value;
    }
    
    // ... 其余流程同上
    
    if (value == null) {
        // 緩存空值,防止穿透
        localCache.set(key, NullValue.INSTANCE, NULL_TTL);
        redisClient.setex(key, NULL_TTL, NullValue.INSTANCE);
    }
    
    return value;
}

4.2 緩存擊穿

緩存擊穿是指熱點key在緩存過期的瞬間,大量請求直接訪問數據庫。

解決方案:

  • 互斥鎖:當緩存失效時,使用分布式鎖保證只有一個請求可以訪問數據庫
  • 永不過期:對極熱點數據設置永不過期,通過后臺任務定期更新
public Object readDataWithMutex(String key) {
    Object value = localCache.get(key);
    if (value != null) {
        return value;
    }
    
    // 嘗試獲取分布式鎖
    String lockKey = "LOCK:" + key;
    boolean locked = redisClient.acquireLock(lockKey, 3, TimeUnit.SECONDS);
    
    if (locked) {
        try {
            // 再次檢查緩存,可能已被其他線程更新
            value = redisClient.get(key);
            if (value != null) {
                localCache.set(key, value, LOCAL_TTL);
                return value;
            }
            
            // 查詢數據庫
            value = db.query(key);
            if (value != null) {
                redisClient.set(key, value, REDIS_TTL);
                localCache.set(key, value, LOCAL_TTL);
            } else {
                // 緩存空值防止穿透
                redisClient.setex(key, NULL_TTL, NullValue.INSTANCE);
            }
            
            return value;
        } finally {
            // 釋放鎖
            redisClient.releaseLock(lockKey);
        }
    } else {
        // 未獲取到鎖,短暫等待后重試
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        return readData(key); // 重試
    }
}

4.3 緩存雪崩

緩存雪崩是指大量緩存同時過期,導致所有請求直達數據庫。

解決方案:

  • 隨機TTL:為緩存過期時間添加隨機值,避免同時過期
  • 多層緩存:使用本地緩存作為Redis緩存的緩沖層
  • 熱點數據永不過期:對極熱點數據設置永不過期,通過后臺更新
// 為TTL添加隨機值,避免同時過期
private int getRandomTtl(int baseTtl) {
    Random random = new Random();
    int randomOffset = random.nextInt(300); // 0-5分鐘的隨機偏移
    return baseTtl + randomOffset;
}

5. 監控與降級

任何緩存系統都需要完善的監控和降級機制:

5.1 監控指標

  • 緩存命中率:本地緩存和Redis的命中率
  • 緩存操作耗時:讀取各層緩存的平均耗時
  • 數據庫壓力:QPS、連接數等
  • 系統資源:內存使用率、網絡帶寬等

5.2 降級策略

當緩存系統出現故障時,需要有降級方案:

  • 本地緩存降級:當Redis不可用時,可以適當延長本地緩存TTL
  • 讀操作降級:直接訪問數據庫,但需要限制頻率防止數據庫過載
  • 寫操作降級:將寫操作排隊異步執行,或使用本地隊列暫存
public Object readDataWithFallback(String key) {
    try {
        // 正常緩存讀取流程
        return readData(key);
    } catch (CacheException e) {
        // 緩存系統異常,降級直接查詢數據庫
        log.warn("Cache system unavailable, fallback to DB", e);
        metrics.counter("cache.fallback").increment();
        
        // 但需要限制頻率,防止數據庫壓力過大
        if (rateLimiter.tryAcquire()) {
            return db.query(key);
        } else {
            throw new ServiceUnavailableException("System busy, please try again later");
        }
    }
}

6. 總結

設計本地緩存、Redis和數據庫的三層架構需要在性能和數據一致性之間找到平衡點。本文提出了一套綜合解決方案:

  • 寫操作采用"先更新數據庫,再刪除緩存"的策略,結合延遲雙刪提高一致性
  • 讀操作遵循緩存優先原則,逐層回退
  • 過期策略采用分級TTL設計,結合主動刷新和被動失效
  • 特殊場景使用布隆過濾器、互斥鎖和隨機TTL應對
  • 監控降級確保系統在異常情況下仍能提供服務

實際實施中,需要根據具體業務特點調整策略參數,如TTL時長、延遲刪除時間等。同時,完善的監控和日志記錄對于排查問題和優化系統至關重要。

通過合理設計一致性協議和過期策略,三層緩存架構能夠顯著提升系統性能,同時保證數據的正確性和新鮮度,為高并發場景下的應用提供強有力的支撐。

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

2021-06-11 09:21:58

緩存數據庫Redis

2025-08-08 07:09:58

2018-09-11 10:46:10

緩存數據庫一致性

2024-05-28 00:50:00

RedisMySQL緩存

2020-09-03 09:45:38

緩存數據庫分布式

2021-04-24 16:58:03

數據庫工具技術

2025-04-27 08:52:21

Redis數據庫緩存

2017-05-19 15:00:05

session架構web-server

2024-04-11 13:45:14

Redis數據庫緩存

2023-09-24 14:35:43

Redis數據庫

2024-12-26 15:01:29

2024-10-28 12:41:25

2022-03-29 10:39:10

緩存數據庫數據

2023-08-15 09:31:01

分布式緩存

2020-05-12 10:43:22

Redis緩存數據庫

2024-11-07 22:57:30

2020-09-04 06:32:08

緩存數據庫接口

2022-12-14 08:23:30

2017-07-25 14:38:56

數據庫一致性非鎖定讀一致性鎖定讀

2024-12-24 14:26:47

點贊
收藏

51CTO技術棧公眾號

亚洲第一二三四五区| 成人无号精品一区二区三区| 国产精品久久久久久户外露出| 日韩av手机在线| 色欲AV无码精品一区二区久久| 免费观看成人性生生活片| 国产精品美女久久久久久久久| 99精品国产高清在线观看| 日本五十路女优| heyzo久久| 日韩美女在线视频| 男女啪啪网站视频| 中文字幕资源网在线观看| 久久99精品一区二区三区三区| 久久久久久久91| 国产真实乱人偷精品人妻| 国产视频一区二区在线播放| 午夜国产精品影院在线观看| 豆国产97在线| 91高潮大合集爽到抽搐| 日韩五码在线| 久久成人免费视频| 日b视频在线观看| 国产成人精品一区二区三区在线 | 欧美色精品在线视频| dy888午夜| 高清av电影在线观看| 成人97人人超碰人人99| 成人精品一区二区三区| 青青操免费在线视频| 欧美人成在线| 久久精品国产99国产精品澳门| 亚洲av网址在线| 久久av影院| 精品久久久久久久久中文字幕 | 亚洲av激情无码专区在线播放| 久久99久久久欧美国产| 68精品久久久久久欧美| 久久这里只有精品国产| 在线一区免费| 久久精品国产久精国产一老狼| 成人无码av片在线观看| 神马久久影院| 精品久久国产老人久久综合| 香蕉视频色在线观看| 在线免费成人| 欧美另类高清zo欧美| 一区二区三区 欧美| 欧美黑人粗大| 色综合天天狠狠| 99er在线视频| 在线免费观看的av| 亚洲精品日产精品乱码不卡| 好吊色欧美一区二区三区视频| 精品国产av一区二区| 国产经典欧美精品| 91在线免费看片| 最近中文字幕在线免费观看| 秋霞电影一区二区| 国产精品av在线| 天堂网中文字幕| 欧美精品麻豆| 九九九久久久久久| 999精品久久久| 日韩av免费大片| 日韩亚洲成人av在线| 蜜桃视频最新网址| 在线电影一区二区| 久久久噜噜噜久噜久久| 成人精品在线看| 亚洲五月婷婷| 欧美一区二区三区精品电影| 国产激情无码一区二区三区| 午夜欧美精品久久久久久久| 欧美日韩国产成人在线| 亚洲黄色一区二区| 老司机午夜免费精品视频| 国产精品18久久久久久首页狼| 久久精品免费av| 国产精品久久国产愉拍| 国产福利成人在线| 中文字幕免费视频观看| 久久国产成人午夜av影院| 91视频九色网站| 天天干天天爽天天操| 久久精品人人做人人爽97| 色综合久久av| 日本福利专区在线观看| 亚洲激情欧美激情| 亚洲国产精品成人天堂| 无遮挡爽大片在线观看视频| 欧美午夜精品久久久| 能看毛片的网站| 亚洲婷婷伊人| 久久精品人人爽| 久久香蕉精品视频| 亚洲性视频h| 国产一区二区三区久久| 国产精品678| 99免费在线视频| 成人天堂资源www在线| 成人欧美一区二区三区视频| 欧美777四色影视在线| 国产精品私人自拍| 400部精品国偷自产在线观看| 午夜影院免费在线| 在线观看日产精品| 尤物国产在线观看| 欧美激情久久久久久久久久久| 亚洲三级免费看| 欧美一区二区三区影院| 你懂的一区二区三区| 久久天天躁狠狠躁夜夜躁| 日本高清www免费视频| 日本人妖一区二区| 国产91社区| 久热av在线| 亚洲第一在线综合网站| av中文字幕网址| 欧美日韩看看2015永久免费| 久久精品视频va| 天天干,天天干| 成人av网站在线| 亚洲激情啪啪| 日韩免费va| 亚洲精品电影在线观看| 五月天丁香激情| 久久精品国产第一区二区三区| 国产精品一区二区三区精品| 成人直播在线| 欧美三级日韩三级| xxxx日本黄色| 久久精品道一区二区三区| 岛国视频一区| 羞羞的网站在线观看| 欧美日韩亚洲综合| 久久久久久国产免费a片| 国产精品最新自拍| 精品视频免费观看| 久草在线视频资源| 日韩美女视频在线| 欧美日韩精品在线观看视频| 免费av成人在线| 日本精品一区二区三区高清 久久| 巨大荫蒂视频欧美另类大| 在线影院国内精品| 国产小视频自拍| 欧美亚洲一区| 欧美精品尤物在线| 2021天堂中文幕一二区在线观| 日韩欧美高清dvd碟片| 蜜桃av免费在线观看| 日本美女一区二区三区视频| 日韩不卡av| 欧美日韩美女| 亚洲第一二三四五区| 男人的天堂一区| 2021国产精品久久精品| 波多野结衣家庭教师视频| 亚洲综合图色| 国产精品电影观看| 国产福利在线观看| 欧美日韩精品在线视频| 亚洲av无码一区二区二三区| 欧美一级网站| 欧美一区二区三区成人久久片| 少妇av在线| 日韩福利在线播放| 久久久久久无码精品大片| 日本一区二区在线不卡| 国产又黄又猛又粗| 中文无码久久精品| 99re视频在线播放| 麻豆视频在线观看免费网站黄| 亚洲欧美在线x视频| 无码人妻精品一区二| 国产精品你懂的| 中文久久久久久| 亚洲国产精品综合久久久| 国产精品久久网| 二区在线播放| 亚洲精品福利在线| 看黄色一级大片| 亚洲欧美色一区| 97香蕉碰碰人妻国产欧美| 日韩av中文字幕一区二区三区| 在线一区亚洲| 国产乱论精品| 国产精品男女猛烈高潮激情| 免费网站免费进入在线| 精品久久国产老人久久综合| 久久久久久久久黄色| 久久先锋资源网| 亚洲热在线视频| 亚洲男女自偷自拍| 正义之心1992免费观看全集完整版| 97一区二区国产好的精华液| 97超级碰在线看视频免费在线看| 日本成a人片在线观看| 日韩国产一区三区| 91久久精品无码一区二区| 午夜欧美大尺度福利影院在线看| 少妇愉情理伦三级| 麻豆91在线播放| 97国产在线播放| 欧美激情四色| 日韩美女一区| 日韩欧美中文在线观看| 国产精品av免费在线观看| 成人影音在线| 啊v视频在线一区二区三区 | 欧美1o一11sex性hdhd| 日韩电影免费| 69堂成人精品免费视频| 精品深夜av无码一区二区老年| 欧美韩国日本不卡| 精品中文字幕在线播放 | 久久久无码人妻精品无码| 日韩国产在线一| 你懂的av在线| 欧美高清不卡| 亚洲精品国产精品国自产| 四虎精品一区二区免费| 夜夜嗨av一区二区三区四区 | 在线免费看黄色片| 秋霞电影网一区二区| 美女福利视频在线| 欧美电影免费观看高清| 欧美一区二区三区电影在线观看| 韩国精品福利一区二区三区| 91久久在线观看| 美女久久久久久| 国产精品欧美日韩| 色豆豆成人网| 欧洲成人午夜免费大片| 三级在线看中文字幕完整版| 最近更新的2019中文字幕| 午夜视频在线播放| 亚洲精品大尺度| 天堂av资源网| 日韩成人在线播放| 欧美 日韩 国产 成人 在线| 3atv在线一区二区三区| 日本视频www色| 91久久久免费一区二区| 波多野结衣 久久| 日韩欧美国产一区二区| 日本wwwxx| 国产美女一区二区| 91大神免费观看| 成人做爰69片免费看网站| 制服.丝袜.亚洲.中文.综合懂| 国产精品99久| 无码人妻少妇色欲av一区二区| 国产精品综合久久| 肉丝美足丝袜一区二区三区四| 国产在线播精品第三| 超碰91在线播放| 国产一区二区中文字幕| 曰本三级日本三级日本三级| 成人激情免费电影网址| 97人妻精品一区二区三区免 | 国产麻豆乱码精品一区二区三区| 成人午夜三级| 免费看成人午夜电影| 一本久久青青| 免费久久一级欧美特大黄| 日韩极品一区| 亚洲精品电影在线一区| 欧美久久九九| 欧美丰满熟妇bbbbbb百度| 天堂一区二区在线免费观看| 欧美亚洲日本在线观看| 极品少妇xxxx精品少妇| 欧美成人精品一区二区综合免费| 国产伦精品一区二区三区免费| 性高潮久久久久久| 久久网站最新地址| 成年人二级毛片| 亚洲一本大道在线| 波多野结衣视频网站| 日韩人在线观看| 国产又粗又猛又黄又爽无遮挡| 日韩小视频在线观看专区| 天堂国产一区二区三区| 中文字幕亚洲国产| 中国av在线播放| 人人做人人澡人人爽欧美| 免费视频成人| 国产精品一码二码三码在线| 精品国产美女| 男人添女荫道口喷水视频| 久久香蕉精品| 日韩大尺度视频| 久久影音资源网| www.av成人| 色偷偷成人一区二区三区91| 国产又爽又黄免费软件| 欧美不卡视频一区| 在线中文资源天堂| 午夜精品在线视频| 国产精品麻豆| 国产一区在线免费| 精品日韩毛片| 131美女爱做视频| 国产在线视频不卡二| 精品久久久久一区二区| 中文字幕中文字幕中文字幕亚洲无线| 久久精品国产亚洲av高清色欲| 欧美日韩精品专区| 精品电影在线| 午夜欧美不卡精品aaaaa| 高清在线一区二区| 色女人综合av| 噜噜噜在线观看免费视频日韩 | 99热这里有精品| 欧美连裤袜在线视频| 欧美日一区二区在线观看| 成年人网站大全| 99久久精品国产毛片| 免费在线观看亚洲| 制服丝袜亚洲播放| 97电影在线看视频| 国内免费久久久久久久久久久 | 色婷婷狠狠综合| 黄色av免费观看| 久久人人爽人人爽人人片亚洲 | 国产中文字幕日韩| 成人三级av在线| 亚洲一区二区三区精品在线观看| 久久国产高清| 亚洲黄色小说在线观看| 椎名由奈av一区二区三区| 中文字幕在线网址| 亚洲免费高清视频| sm在线播放| 国产经品一区二区| 欧美日韩一视频区二区| 久久综合在线观看| 日韩美女精品在线| 国产精品国产三级国产aⅴ | 啦啦啦中文在线观看日本| 91精品国产综合久久香蕉最新版| 操欧美老女人| 久草福利视频在线| 亚洲国产经典视频| 一二三区在线播放| 永久免费看mv网站入口亚洲| 制服丝袜专区在线| 国产一区二区三区色淫影院| 精品91视频| 亚洲av无码一区二区二三区| 欧美性黄网官网| 美女毛片在线看| 国产精品久久久久一区二区| 99久久久久国产精品| 久久综合伊人77777麻豆最新章节| 久久无码av三级| 成人黄色三级视频| 色妞在线综合亚洲欧美| 色8久久久久| 久久久久久久香蕉| 成人性色生活片免费看爆迷你毛片| 国产网友自拍视频| 日韩女优视频免费观看| 欧美aa一级| 欧美精品一区二区三区在线看午夜 | 美日韩免费视频| 99亚洲一区二区| 黄色正能量网站| 欧美三区在线视频| 91三级在线| 久久精品国产理论片免费| 久久欧美肥婆一二区| 久久久99999| 欧美videossexotv100| 国产污视频在线播放| 日本一区二区在线视频观看| 久久99精品国产91久久来源| 成人免费视频网站入口::| 精品国产一二三| 3344国产永久在线观看视频| 日韩精品资源| 高清日韩电视剧大全免费| 国产婷婷在线观看| 高跟丝袜欧美一区| 午夜在线视频| 国产精品毛片va一区二区三区| 久久久久久夜| 男的操女的网站| 亚洲第一精品久久忘忧草社区| 成人在线高清免费| 亚洲人成网站在线观看播放| 国产精品一区二区三区乱码| 天堂在线免费观看视频| 久久久精品视频在线观看| 超碰97成人| 牛夜精品久久久久久久| 午夜一区二区三区在线观看| 天堂中文а√在线|