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

淺談本地緩存的幾種方案選型

數據庫
說到緩存,面試官基本上會繞不開以下幾個話題!項目中哪些地方用到了緩存?為什么要使用緩存?怎么使用它的?引入緩存后會帶來哪些問題?

一、摘要

說到緩存,面試官基本上會繞不開以下幾個話題!

項目中哪些地方用到了緩存?為什么要使用緩存?怎么使用它的?引入緩存后會帶來哪些問題?

這些問題,基本上是互聯網公司面試時必問的一些問題,如果面試的時候,連緩存都不清楚,那確實多少顯的有些尷尬!

項目里面為什么要引入緩存?這個問題還得結合項目中的業務來回答!

引入緩存,其實主要有兩個用途:高性能、高并發!

假設某個操作非常頻繁,比如網站的商城首頁,需要頻繁的從數據庫里面獲取商品數據,可能從數據庫一頓各種亂七八糟的操作下來,平均耗時 500 ms,隨著請求頻次越高,用戶等待數據的返回結果時間越來越長,體驗越來越差。

如果此時,引入緩存,將數據庫里面查詢出來的商品數據信息,放入緩存服務里面,當用戶再此發起查詢操作的時候,直接從緩存服務里面獲取,速度從耗時 500 ms,可能直接優化成 5 ms,體驗上瞬間會上升好幾個層次!

這就是引入緩存帶來的高性能體驗結果!

當然,除此之外,引入緩存之前,以 mysql 數據庫為例,單臺機器一秒內的請求次數到達 2000 之后就會開始報警;引入緩存之后,比如以 redis 緩存服務器為例,單臺機器一秒內的請求次數支持 110000 次,兩者支持的并發量完全不是一個數量級的。

這就是引入緩存帶來的高并發體驗結果!

尤其是對于流量很大的業務,引入緩存,給系統帶來的提升是十分顯著的。

可能有的同學又會發出疑問,緩存和數據庫為啥差距這么大,有啥區別?

我們都知道在計算機領域,數據的存儲主要有兩處:一處是內存,另一處是磁盤。

在計算機中,內存的數據讀寫性能遠超磁盤的讀寫性能,盡管如此,其實兩者也有不同,如果數據存儲到內存中,雖然讀寫性能非常高,但是當電腦重啟之后,數據會全部清除;而存入磁盤的數據,雖然讀寫性能很差,但是電腦重啟之后數據不會丟失。

因為兩者的數據存儲方案不同,造就了不同的實踐用途!

我們上面講到的緩存服務,其實本質就是將數據存儲到內存中;而數據庫服務,是將數據寫入到磁盤,從磁盤中讀取數據。

無論是哪種方案,沒有絕對的好與壞,主要還是取決于實際的業務用途。

在項目中如何引入緩存呢?我們通常的做法如下:

操作步驟:

1.當用戶發起訪問某數據的操作時,檢查緩存服務里面是否存在,如果存在,直接返回;如果不存在,走數據庫的查詢服務。

2.從數據庫里面獲取到有效數據之后,存入緩存服務,并返回給用戶。

3.當被訪問的數據發生更新的時候,需要同時刪除緩存服務,以便用戶再次查詢的時候,能獲取到最新的數據。

當然以上的緩存處理辦法,對于簡單的需要緩存的業務場景,能輕松應對。

但是面對復雜的業務場景和服務架構,尤其是對緩存要求比較高的業務,引入緩存的方式,也會跟著一起變化!

從緩存面向的對象不同,緩存分為:本地緩存、分布式緩存和多級緩存。

所謂本地緩存,相信大家都能理解,在單個計算機服務實例中,直接把數據緩存到內存中進行使用。

但是現在的服務,大多都是以集群的方式來部署,你也可以這樣理解,同一個網站服務,同時在兩臺計算機里面部署,比如你用到的session會話,就無法同時共享,因此需要引入一個獨立的緩存服務來連接兩臺服務器,這個獨立部署的緩存服務,我們把這種技術實踐方案稱為分布式緩存。

在實際的業務中,本地緩存和分布式緩存會同時結合進行使用,當收到訪問某個數據的操作時,會優先從本地緩存服務(也叫一級緩存)查詢,如果沒有,再從分布式緩存服務(也叫二級緩存)里面獲取,如果也沒有,最后再從數據庫里面獲取;從數據庫查詢完成之后,在依次更新分布式緩存服務、本次緩存服務,我們把這個技術實踐方案叫多級緩存!

由于篇幅的原因,我們在后期給大家介紹分布式緩存服務、多級緩存服務。

今天主要圍繞本地緩存服務的技術實現,給大家進行分享和介紹!

二、方案介紹

如果使用過緩存的同學,可以很容易想到緩存需要哪些東西,通常我們在使用緩存的時候,比較關注兩個地方,第一是內存持久化,第二是支持緩存的數據自動過期清楚。

基于以上的要求,我們向介紹以下幾種技術實現方案。

2.1、手寫一個緩存服務

對于簡單的數據緩存,我們完全可以自行編寫一套緩存服務,實現過程如下!

首先,創建一個緩存實體類。

public class CacheEntity {

    /**
     * 緩存鍵
     */
    private String key;

    /**
     * 緩存值
     */
    private Object value;

    /**
     * 過期時間
     */
    private Long expireTime;

    //...set、get
}

接著,編寫一個緩存操作工具類CacheUtils。

public class CacheUtils {

    /**
     * 緩存數據
     */
    private final static Map<String, CacheEntity> CACHE_MAP = new ConcurrentHashMap<>();

    /**
     * 定時器線程池,用于清除過期緩存
     */
    private static ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();


    static {
        // 注冊一個定時線程任務,服務啟動1秒之后,每隔500毫秒執行一次
        executor.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                // 清理過期緩存
                clearCache();
            }
        },1000,500,TimeUnit.MILLISECONDS);
    }

    /**
     * 添加緩存
     * @param key    緩存鍵
     * @param value  緩存值
     */
    public static void put(String key, Object value){
        put(key, value, 0);
    }


    /**
     * 添加緩存
     * @param key    緩存鍵
     * @param value  緩存值
     * @param expire 緩存時間,單位秒
     */
    public static void put(String key, Object value, long expire){
        CacheEntity cacheEntity = new CacheEntity()
                .setKey(key)
                .setValue(value);
        if(expire > 0){
            Long expireTime = System.currentTimeMillis() + Duration.ofSeconds(expire).toMillis();
            cacheEntity.setExpireTime(expireTime);
        }
        CACHE_MAP.put(key, cacheEntity);
    }


    /**
     * 獲取緩存
     * @param key
     * @return
     */
    public static Object get(String key){
        if(CACHE_MAP.containsKey(key)){
            return CACHE_MAP.get(key).getValue();
        }
        return null;
    }

    /**
     * 移除緩存
     * @param key
     */
    public static void remove(String key){
        if(CACHE_MAP.containsKey(key)){
            CACHE_MAP.remove(key);
        }
    }

    /**
     * 清理過期的緩存數據
     */
    private static void clearCache(){
        if(CACHE_MAP.size() > 0){
            return;
        }
        Iterator<Map.Entry<String, CacheEntity>> iterator = CACHE_MAP.entrySet().iterator();
        while (iterator.hasNext()){
            Map.Entry<String, CacheEntity> entry = iterator.next();
            if(entry.getValue().getExpireTime() != null && entry.getValue().getExpireTime().longValue() > System.currentTimeMillis()){
                iterator.remove();
            }
        }
    }

}

最后,我們來測試一下緩存服務。

// 寫入緩存數據
CacheUtils.put("userName", "張三", 3);

// 讀取緩存數據
Object value1 = CacheUtils.get("userName");
System.out.println("第一次查詢結果:" + value1);

// 停頓4秒
Thread.sleep(4000);

// 讀取緩存數據
Object value2 = CacheUtils.get("userName");
System.out.println("第二次查詢結果:" + value2);

輸出結果,與預期一致!

第一次查詢結果:張三
第二次查詢結果:null

實現思路其實很簡單,采用ConcurrentHashMap作為緩存數據存儲服務,然后開啟一個定時調度,每隔500毫秒檢查一下過期的緩存數據,然后清除掉!

2.2、基于 Guava Cache 實現本地緩存

Guava 是 Google 團隊開源的一款 Java 核心增強庫,包含集合、并發原語、緩存、IO、反射等工具箱,性能和穩定性上都有保障,應用十分廣泛。

相比自己編寫的緩存服務,Guava Cache 要強大的多,支持很多特性如下:

  • 支持最大容量限制
  • 支持兩種過期刪除策略(插入時間和讀取時間)
  • 支持簡單的統計功能
  • 基于 LRU 算法實現

使用方面也很簡單,首先引入guava庫包。

<!--guava-->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.1-jre</version>
</dependency>

案例代碼如下:

// 創建一個緩存實例
Cache<String, String> cache = CacheBuilder.newBuilder()
        // 初始容量
        .initialCapacity(5)
        // 最大緩存數,超出淘汰
        .maximumSize(10)
        // 過期時間
        .expireAfterWrite(3, TimeUnit.SECONDS)
        .build();

// 寫入緩存數據
cache.put("userName", "張三");

// 讀取緩存數據
String value1 = cache.get("userName", () -> {
    // 如果key不存在,會執行回調方法
    return "key已過期";
});
System.out.println("第一次查詢結果:" + value1);

// 停頓4秒
Thread.sleep(4000);

// 讀取緩存數據
String value2 = cache.get("userName", () -> {
    // 如果key不存在,會執行回調方法
    return "key已過期";
});
System.out.println("第二次查詢結果:" + value2);

輸出結果:

第一次查詢結果:張三
第二次查詢結果:key已過期

2.3、基于 Caffeine 實現本地緩存

Caffeine 是基于 java8 實現的新一代緩存工具,緩存性能接近理論最優,可以看作是 Guava Cache 的增強版,功能上兩者類似,不同的是 Caffeine 采用了一種結合 LRU、LFU 優點的算法:W-TinyLFU,在性能上有明顯的優越性。

使用方面也很簡單,首先引入caffeine庫包。

<!--caffeine-->
<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>2.9.3</version>
</dependency>

案例代碼如下:

// 創建一個緩存實例
Cache<String, String> cache = Caffeine.newBuilder()
        // 初始容量
        .initialCapacity(5)
        // 最大緩存數,超出淘汰
        .maximumSize(10)
        // 設置緩存寫入間隔多久過期
        .expireAfterWrite(3, TimeUnit.SECONDS)
        // 設置緩存最后訪問后間隔多久淘汰,實際很少用到
        //.expireAfterAccess(3, TimeUnit.SECONDS)
        .build();

// 寫入緩存數據
cache.put("userName", "張三");

// 讀取緩存數據
String value1 = cache.get("userName", (key) -> {
    // 如果key不存在,會執行回調方法
    return "key已過期";
});
System.out.println("第一次查詢結果:" + value1);

// 停頓4秒
Thread.sleep(4000);

// 讀取緩存數據
String value2 = cache.get("userName", (key) -> {
    // 如果key不存在,會執行回調方法
    return "key已過期";
});
System.out.println("第二次查詢結果:" + value2);

輸出結果:

第一次查詢結果:張三
第二次查詢結果:key已過期

2.4、基于 Encache 實現本地緩存

Encache 是一個純 Java 的進程內緩存框架,具有快速、精干等特點,是 Hibernate 中默認的 CacheProvider。

同 Caffeine 和 Guava Cache 相比,Encache 的功能更加豐富,擴展性更強,特性如下:

  • 支持多種緩存淘汰算法,包括 LRU、LFU 和 FIFO
  • 緩存支持堆內存儲、堆外存儲、磁盤存儲(支持持久化)三種
  • 支持多種集群方案,解決數據共享問題

使用方面也很簡單,首先引入ehcache庫包。

<!--ehcache-->
<dependency>
    <groupId>org.ehcache</groupId>
    <artifactId>ehcache</artifactId>
    <version>3.9.7</version>
</dependency>

案例代碼如下:

/**
 * 自定義過期策略實現
 */
public  class CustomExpiryPolicy<K, V> implements ExpiryPolicy<K, V> {

    private final Map<K, Duration> keyExpireMap = new ConcurrentHashMap();


    public Duration setExpire(K key, Duration duration) {
        return keyExpireMap.put(key, duration);
    }

    public Duration getExpireByKey(K key) {
        return Optional.ofNullable(keyExpireMap.get(key))
                .orElse(null);
    }

    public Duration removeExpire(K key) {
        return keyExpireMap.remove(key);
    }

    @Override
    public Duration getExpiryForCreation(K key, V value) {
        return Optional.ofNullable(getExpireByKey(key))
                .orElse(Duration.ofNanos(Long.MAX_VALUE));
    }

    @Override
    public Duration getExpiryForAccess(K key, Supplier<? extends V> value) {
        return getExpireByKey(key);
    }

    @Override
    public Duration getExpiryForUpdate(K key, Supplier<? extends V> oldValue, V newValue) {
        return getExpireByKey(key);
    }
}
public static void main(String[] args) throws InterruptedException {
    String userCache = "userCache";

    // 自定義過期策略
    CustomExpiryPolicy<Object, Object> customExpiryPolicy = new CustomExpiryPolicy<>();

    // 聲明一個容量為20的堆內緩存配置
    CacheConfigurationBuilder configurationBuilder = CacheConfigurationBuilder
            .newCacheConfigurationBuilder(String.class, String.class, ResourcePoolsBuilder.heap(20))
            .withExpiry(customExpiryPolicy);

    // 初始化一個緩存管理器
    CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
            // 創建cache實例
            .withCache(userCache, configurationBuilder)
            .build(true);

    // 獲取cache實例
    Cache<String, String> cache = cacheManager.getCache(userCache, String.class, String.class);
    // 獲取過期策略
    CustomExpiryPolicy expiryPolicy = (CustomExpiryPolicy)cache.getRuntimeConfiguration().getExpiryPolicy();

    // 寫入緩存數據
    cache.put("userName", "張三");
    // 設置3秒過期
    expiryPolicy.setExpire("userName", Duration.ofSeconds(3));

    // 讀取緩存數據
    String value1 = cache.get("userName");
    System.out.println("第一次查詢結果:" + value1);

    // 停頓4秒
    Thread.sleep(4000);

    // 讀取緩存數據
    String value2 = cache.get("userName");
    System.out.println("第二次查詢結果:" + value2);
}

輸出結果:

第一次查詢結果:張三
第二次查詢結果:null

三、小結

從易用性角度看:Guava Cache、Caffeine 和 Encache 都有十分成熟的接入方案,使用簡單。

從功能性角度看:Guava Cache 和 Caffeine 功能類似,都是只支持堆內緩存,Encache 相比功能更為豐富,不僅支持堆內緩存,還支持磁盤寫入、集群實現。

從性能角度看:Caffeine 最優、GuavaCache 次之,Encache 最差。

以下是網絡上三者性能對比的結果。

對于本地緩存的技術選型,推薦采用 Caffeine,性能上毫無疑問,遙遙領先。

雖然 Encache 功能非常的豐富,甚至提供了持久化和集群的功能,但是相比更成熟的分布式緩存中間件 redis 來說,還是稍遜一些!

關于 redis 的使用,有興趣的同學可以查看歷史文章,之前有寫過 redis 系列相關的技術實踐介紹。

本文參考了很多其他博主的文章,內容難免有描述不對的地方,歡迎網友留言指出!

責任編輯:華軒 來源: Java極客技術
相關推薦

2025-11-12 00:25:00

2022-08-19 14:06:56

前端架構技術

2022-05-27 09:25:12

攜程酒店本地緩存查詢服務

2011-06-20 10:36:29

SEO

2016-10-27 21:33:46

ReduxFlux異步方案

2024-03-14 08:17:33

JVMJava對象

2024-09-27 08:57:36

2012-03-22 09:31:14

Java

2022-06-16 07:31:15

MySQL服務器服務

2009-07-21 17:41:58

JDBC數據源

2017-12-20 16:23:18

抓娃娃

2024-05-20 08:08:00

分布式系統緩存C#

2019-04-29 11:00:14

架構負載均衡互聯網

2009-07-28 16:07:40

.NET圖片快速處理

2011-03-21 13:44:38

SQL ServerSQL Server2分頁

2017-05-15 13:40:20

瀏覽器http緩存機制

2009-08-03 18:47:12

ASP.NET數據緩存

2021-10-12 08:00:00

存儲邊緣緩存邊緣服務器

2017-04-26 14:15:35

瀏覽器緩存機制

2011-08-02 10:50:56

iOS開發 內存緩存
點贊
收藏

51CTO技術棧公眾號

肉色超薄丝袜脚交69xx图片| 久草视频这里只有精品| 五月婷婷激情五月| 久久中文视频| 精品噜噜噜噜久久久久久久久试看| 久久99久久99精品| 国产永久免费高清在线观看视频| 久久机这里只有精品| 欧美精品videossex88| 国产在线观看h| 看亚洲a级一级毛片| 欧美日韩国产一中文字不卡| 一区二区日本| 午夜av免费观看| 精品系列免费在线观看| 欧美一级高清免费播放| 国产福利视频网站| 国产一区二区三区站长工具| 日韩丝袜情趣美女图片| 91在线视频观看免费| 毛片在线导航| 国产精品国产三级国产有无不卡| 国产一区自拍视频| 国产乱淫a∨片免费观看| 久久激情视频| 午夜精品一区二区三区在线视频 | swag国产精品一区二区| 欧美亚洲愉拍一区二区| 男女猛烈激情xx00免费视频| 黄网站在线播放| 国产欧美日韩视频在线观看| 国产欧美一区二区三区不卡高清| 97人人爽人人爽人人爽| 日本v片在线高清不卡在线观看| 久久久久久久久久久亚洲| 国产精品麻豆一区| 精品一区二区三| 精品视频久久久久久久| 亚洲美女精品视频| 欧美黄视频在线观看| 欧美老年两性高潮| 日韩大片一区二区| 成人h在线观看| 日韩欧美在线中文字幕| 成人av一级片| 乱人伦视频在线| 天天av天天翘天天综合网| 成人小视频在线观看免费| 亚洲资源一区| 一区二区三区四区亚洲| 国产专区在线视频| 欧美寡妇性猛交xxx免费| 一区二区在线观看av| 日本丰满大乳奶| 91亚洲天堂| 亚洲综合色区另类av| 浴室偷拍美女洗澡456在线| av在线官网| 一个色在线综合| 亚洲理论电影在线观看| 成人观看网址| 欧美色视频日本版| 国产精品天天av精麻传媒| 日韩成人高清| 欧美日本国产视频| 在线视频观看91| 国产亚洲高清在线观看| 欧美不卡一区二区三区| 变态另类丨国产精品| 亚洲另类av| 最近的2019中文字幕免费一页| 91视频免费看片| 亚洲欧美在线专区| 欧美国产视频一区二区| 国产黄色片视频| 男人的天堂亚洲在线| 国产精品久久激情| 国产精品女人久久久| 国产mv日韩mv欧美| 九色视频成人porny| 久热av在线| 综合久久久久综合| 成人在线播放网址| 精品国产第一福利网站| 欧美日韩情趣电影| 亚洲成人福利视频| 婷婷成人在线| 久久久成人精品| 国产91av视频| 毛片一区二区三区| 国产精品二区在线观看| 伦理片一区二区三区| 亚洲日本一区二区三区| 欧美日韩在线一| 欧美激情啪啪| 日韩电影在线观看中文字幕| www久久久久久久| 黄色在线成人| 国产精品美腿一区在线看| av一级黄色片| 国产欧美日韩在线观看| 黄色一级大片免费| 国产福利亚洲| 亚洲精品美女久久| 日韩成人毛片视频| 日本一不卡视频| 国产一区二区不卡视频| 国产原创精品视频| 色国产综合视频| 毛茸茸free性熟hd| 国产精品久久久久久久| 欧美中文在线字幕| 性一交一乱一乱一视频| 国产精品拍天天在线| 成人免费aaa| 久久久久九九精品影院| 在线观看日韩av| 国产对白videos麻豆高潮| 国产呦萝稀缺另类资源| 色就是色欧美| 永久免费毛片在线播放| 日韩亚洲欧美一区| 国产精品久久久免费看| 久久久国产亚洲精品| 国产一区免费在线观看| 色呦呦在线观看视频| 7777精品伊人久久久大香线蕉| 久久精品成人av| 国产亚洲毛片| 国产一区二区高清视频| 黄色影院在线看| 91精品国产综合久久精品app| 国产黄色大片免费看| 久久电影一区| 久久人人爽爽人人爽人人片av| 激情影院在线| 日韩三级在线观看| a级黄色片免费看| 国产一区二区不卡在线| 永久域名在线精品| 欧美美女被草| 日韩在线欧美在线国产在线| 国产情侣呻吟对白高潮| 国产日韩精品一区| 美女喷白浆视频| 成人综合一区| 国产精品日韩在线| 在线观看精品一区二区三区| 在线免费观看一区| 国产精品成人在线视频| 老司机午夜免费精品视频| 欧美精品人人做人人爱视频| 成人性生活av| 亚洲性69xxxbbb| 国产精品sm调教免费专区| 日本一区二区三区四区| 黄色永久免费网站| 天堂美国久久| 亚洲综合在线小说| heyzo在线| 日韩成人xxxx| 国产精品第六页| 成人免费在线播放视频| 伊人av在线播放| 亚洲看片免费| 欧美一卡2卡3卡4卡无卡免费观看水多多| 亚洲国产成人二区| 原创国产精品91| 99久久精品无免国产免费 | 久久精品视频8| 91免费在线看| 亚洲欧美国产日韩综合| 欧美精品国产| 久久久久久一区| 久久青草视频| 欧美精品久久久久| 猫咪在线永久网站| 欧美一区二区在线不卡| 欧美成人精品欧美一级乱黄| 久久久久久久网| 91视频这里只有精品| 欧美视频在线观看| 久久久水蜜桃| 国产一区2区在线观看| 97国产精品视频人人做人人爱| 黄色影院在线播放| 538在线一区二区精品国产| 国产精品第一页在线观看| 久久精品人人做人人综合| 超碰成人在线播放| 亚洲国产一区二区三区高清| 日韩免费电影一区二区| www.国产精品一区| 国产专区精品视频| 国产美女高潮在线| 久久精品欧美视频| 四虎精品在线| 日韩午夜三级在线| 九九热最新视频| 激情久久av一区av二区av三区| 黄大色黄女片18免费| av一区二区不卡| 激情黄色小视频| 久久国产精品久久w女人spa| 麻豆视频传媒入口| 国产精品羞羞答答在线观看| www.成人av.com| 成人在线视频观看| 57pao成人永久免费视频| 国产在线高清视频| 中文字幕成人在线| 四虎影院在线播放| 亚洲第一男人天堂| 99视频国产精品免费观看a| 在线免费观看日本欧美| 亚洲综合一二三| 亚洲美女在线一区| 日本少妇aaa| 国产人妖乱国产精品人妖| 亚洲香蕉中文网| 国产精品一二三四区| 99re6在线观看| 蜜乳av一区二区三区| 热久久精品免费视频| 99亚洲视频| 亚洲精品无码国产| 欧美激情aⅴ一区二区三区| 亚洲一区在线免费| 成人在线免费观看视频| 日韩欧美在线观看强乱免费| 一区二区小说| 久久riav| 日韩免费电影在线观看| 国产伦精品一区| 99久久人爽人人添人人澡 | 自拍偷拍欧美一区| 精品人伦一区二区三区| 成人h动漫精品一区二区器材| 91免费高清视频| 国产aa精品| 92看片淫黄大片欧美看国产片| 亚洲精品69| 国产在线拍偷自揄拍精品| 四虎地址8848精品| 国产一区二区在线免费| 亚洲青青一区| 91在线色戒在线| 免费欧美网站| 国产精品swag| 青青久久av| 奇米影视首页 狠狠色丁香婷婷久久综合| 欧美精品中文字幕亚洲专区| 久草一区二区| 九一成人免费视频| 亚洲韩国在线| 91精品天堂福利在线观看| 看一级黄色录像| 亚洲午夜久久久久久尤物| 亚洲国产成人精品无码区99| 一区二区三区导航| 欧美视频第三页| 另类小说综合欧美亚洲| 日韩精品aaa| 成人午夜视频在线| 熟女丰满老熟女熟妇| 久久精品欧美日韩精品| 国产一区在线观看免费| 亚洲免费在线观看| 日韩成人一区二区三区| 色噜噜久久综合| 国产伦理吴梦梦伦理| 精品少妇一区二区三区在线视频 | 不卡一区在线观看| 97人妻精品一区二区免费| 亚洲国产精品av| 青娱乐国产在线| 欧美性猛交xxxx黑人猛交| 中国一级特黄视频| 91精品国产福利| 人妻一区二区三区免费| 欲色天天网综合久久| 麻豆福利在线观看| 国产不卡av在线| 美女日韩一区| 日本一区二区三区在线视频| 亚洲女同一区| 成人综合视频在线| 免费高清成人在线| 老司机免费视频| 国产精品久久久久久久久免费桃花 | 婷婷综合福利| 中国成人亚色综合网站| 在线视频精品| 九九热精品国产| 26uuu色噜噜精品一区| 欧美性x x x| 日韩欧美综合在线视频| 国产福利第一视频| 伊人伊成久久人综合网站| 欧美黑人xx片| 成人性生交xxxxx网站| 丝袜连裤袜欧美激情日韩| 中文字幕精品一区日韩| 国产精品美女久久久| 亚洲精品久久久久久| 国产欧美日韩中文久久| 日韩av在线播放观看| 69堂国产成人免费视频| 国产毛片av在线| 97在线看福利| 午夜视频在线观看精品中文| 亚洲电影一二三区| 性伦欧美刺激片在线观看| 三级黄色片播放| 国产精品麻豆久久久| 五月激情六月丁香| 精品奇米国产一区二区三区| 毛片av在线| 国产精品视频免费在线| 欧美激情在线免费| 欧美视频免费看欧美视频| 国产高清久久久久| 日韩影院一区二区| 欧美日韩精品一区二区三区| 你懂的好爽在线观看| 2019中文在线观看| 国产欧美自拍一区| 国产精品www在线观看| 国产乱淫av一区二区三区| 在线观看黄网址| 欧美日韩大陆一区二区| 天堂中文а√在线| 国产精品视频区1| 日韩一级毛片| 怡红院亚洲色图| 中文在线资源观看网站视频免费不卡| 中文字幕免费在线观看视频| 亚洲精品97久久| 蜜桃av.网站在线观看| 国产精品二区三区四区| 亚洲福利久久| 男女一区二区三区| 午夜欧美视频在线观看| 天天av天天翘| 91成人天堂久久成人| 亚洲丝袜美腿一区| 欧美aⅴ在线观看| 久久久欧美精品sm网站| 免费黄色网址在线| 国产丝袜一区二区| 唐人社导航福利精品| 日产中文字幕在线精品一区| 免费成人在线观看视频| 91n在线视频| 日韩午夜中文字幕| 18aaaa精品欧美大片h| 精品欧美一区二区精品久久| 一区二区三区国产在线| 波多野在线播放| 欧美麻豆精品久久久久久| 超碰在线caoporn| 国产一级精品aaaaa看| 久久久国产精品一区二区中文| 欧美福利第一页| 91精品欧美综合在线观看最新| 三级网站视频在在线播放| 国产一区免费| 麻豆精品视频在线观看| 国产av无码专区亚洲av毛网站| 亚洲精品一区二区三区影院 | 国产精品天天狠天天看| 久久久久久免费视频| 2025中文字幕| 色94色欧美sute亚洲线路一ni| 91在线视频| 国产精品一区二区三区在线观| 丝袜亚洲另类丝袜在线| 国产一区二区视频在线观看免费| 亚洲成人黄色在线| 精品肉辣文txt下载| 精品国产一区二区三区无码| 91女神在线视频| 国产精品羞羞答答在线| 992tv成人免费影院| 久久视频在线| 一级欧美一级日韩片| 欧美日韩在线观看一区二区| 成全电影大全在线观看| 五月天丁香综合久久国产| 成人午夜碰碰视频| 中文字幕在线观看视频一区| 欧美激情一级欧美精品| 成人亚洲一区二区| a级大片免费看| 色综合天天综合网国产成人综合天 | 欧美成人免费视频| 国产一卡不卡| 欧美xxxx×黑人性爽| 制服.丝袜.亚洲.中文.综合| а√在线中文在线新版|