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

數(shù)據(jù)庫連接池大比拼:HikariCP vs Druid,誰更勝一籌?

數(shù)據(jù)庫 其他數(shù)據(jù)庫
熟悉 JDBC 的同學(xué)可能知道,用 Java 來操作數(shù)據(jù)庫,通常需要先創(chuàng)建一個數(shù)據(jù)庫連接,然后通過這個連接來執(zhí)行相關(guān)的 SQL 語句,當(dāng)執(zhí)行完畢之后需要再次手動釋放連接。

一、背景介紹

在之前的文章中,我們介紹了 ORM 框架相關(guān)的使用方式,這些框架其實都有一個顯著的特點,那就是會經(jīng)常跟數(shù)據(jù)庫打交道。

熟悉 JDBC 的同學(xué)可能知道,用 Java 來操作數(shù)據(jù)庫,通常需要先創(chuàng)建一個數(shù)據(jù)庫連接,然后通過這個連接來執(zhí)行相關(guān)的 SQL 語句,當(dāng)執(zhí)行完畢之后需要再次手動釋放連接。每當(dāng)來一個涉及數(shù)據(jù)庫的業(yè)務(wù)操作時,都需要經(jīng)歷同樣的操作步驟,示例如下:

// 1.加載數(shù)據(jù)庫驅(qū)動包
Class.forName(DRIVER_CLASS);
// 2.創(chuàng)建一個數(shù)據(jù)庫連接實例
Connection conn = DriverManager.getConnection(JDBC_URL, USER, PASSWORD);
// 3.執(zhí)行SQL語句
Statement statement = conn.createStatement();
statement.executeUpdate("insert into tb_user(id, name) values(1, 'tom') ");
....
// 4.關(guān)閉連接
statement.close();
conn.close();

當(dāng)請求量不高的時候,這種模式不會存在很大的問題,可以正常提供服務(wù),但是當(dāng)請求量超過 1000 的時候,可能數(shù)據(jù)庫連接數(shù)就不夠用了,請求創(chuàng)建數(shù)據(jù)庫連接的客戶端會直接報錯。

為了解決數(shù)據(jù)庫連接數(shù)不夠用的問題,于是誕生了數(shù)據(jù)庫連接池。其核心思想是:用戶需要訪問數(shù)據(jù)庫時,并非創(chuàng)建一個新的連接,而是從連接池中取出一個已建立的空閑連接對象,使用它來訪問和操作數(shù)據(jù)庫;當(dāng)用戶訪問數(shù)據(jù)庫完畢之后,也并非將連接關(guān)閉掉,而是將連接對象還回到連接池中,以便下一個請求訪問使用,實現(xiàn)連接復(fù)用的效果。

事實上,也確實如此,通過連接池來管理數(shù)據(jù)庫的連接,可以有效的提高數(shù)據(jù)庫訪問效率,降低連接異常,提升系統(tǒng)響應(yīng)速度等。

目前,市面上開源的數(shù)據(jù)庫連接池框架非常的多,下面,我們列舉幾個比較知名的 JDBC 開源連接池組件,簡要的了解一下它們的發(fā)展歷史。

  • C3P0:一款很古老的 JDBC 連接池,因作為 Hibernate 框架內(nèi)置的數(shù)據(jù)庫連接池而被開發(fā)者所熟知,但是由于性能較差,且代碼復(fù)雜度很高,官方已經(jīng)放棄維護
  • DBCP:由 Apache 開發(fā)的一個 Java 數(shù)據(jù)庫連接池項目,Tomcat 默認使用的連接池組件,采用單線程來操作連接,性能不好,能支持的并發(fā)量低,逐漸被淘汰
  • Tomcat Jdbc Pool:這個數(shù)據(jù)庫連接池可以看作是 DBCP 的升級版,它支持異步方式獲取連接,在高并發(fā)應(yīng)用環(huán)境下依然保存較好的效果,Tomcat 7及以后默認的連接池組件
  • BoneCP:一款高效、免費的 JDBC  連接池,BoneCP 號稱是最快的連接池框架,不過從 2013 年后不再更新,穩(wěn)定性不佳
  • Druid:阿里出品的一個數(shù)據(jù)庫連接池,功能比較全面,有著高可用且擴展較好的特點,同時還自帶監(jiān)控服務(wù),國內(nèi)流行度非常高
  • HikariCP:數(shù)據(jù)庫連接池的一個后起之秀,在 BoneCP 基礎(chǔ)上開發(fā)的一個高性能的 JDBC 連接池,號稱性能最好,目前已作為 SpringBoot2 默認的數(shù)據(jù)庫連接池組件

從實際的性能測試來看,排名如下:HikariCP > Druid > tomcat-jdbc > dbcp > c3p0。其中HikariCP的性能最好,這主要得益于它采用最大限度的避免鎖競爭的處理思路,進一步加快了連接池的處理效率。

其次,Druid 功能最為全面,比如支持 SQL 攔截、慢 SQL 監(jiān)控等,同時具有良好的擴展性,性能也不錯。

總的來看,如果追求高性能,可以選擇 HikariCP 連接池;如果看中更多的功能支持,可以選擇 Druid。

下面我們一起來看看這兩款連接池的具體應(yīng)用方式。

二、HicariCP

在此,我們介紹兩種方式來完成 HicariCP 連接池的配置初始化,以便于對它的使用有更清晰的理解。

  • 第一種:通過自定義配置文件加載 HicariCP
  • 第二種:SpringBoot 整合 HicariCP

2.1、自定義配置文件加載 HicariCP

2.1.1、添加 HicariCP 依賴庫

首先在pom.xml文件中,添加 HicariCP 依賴庫,內(nèi)容如下:

<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>3.2.0</version>
</dependency>

2.1.2、編寫 HicariCP 相關(guān)的配置屬性

然后在application.properties文件中,自定義 HicariCP 相關(guān)的配置屬性,內(nèi)容如下:

# 自定義 hikari 數(shù)據(jù)源配置屬性
hikari.driver-class-name=com.mysql.jdbc.Driver
hikari.url=jdbc:mysql://localhost:3306/test
hikari.username=root
hikari.password=root
hikari.pool-name=HikariCP
hikari.minimum-idle=5
hikari.maximum-pool-size=20
hikari.idle-timeout=600000
hikari.auto-commit=true
hikari.max-lifetime=1800000
hikari.connection-timeout=30000
hikari.connection-test-query=SELECT 1

2.1.3、編寫 HikariDataSource 初始化方法

接著創(chuàng)建一個HikariDataSourceConfig,用于初始化HikariDataSource類并將其注入到 Bean 工廠中,內(nèi)容如下:

@Configuration
publicclass HikariDataSourceConfig {

    @Value("${hikari.driver-class-name}")
    private String driverClassName;

    @Value("${hikari.url}")
    private String url;

    @Value("${hikari.username}")
    private String userName;

    @Value("${hikari.password}")
    private String password;

    @Value("${hikari.pool-name}")
    private String poolName;

    @Value("${hikari.minimum-idle}")
    private Integer minimumIdle;

    @Value("${hikari.maximum-pool-size}")
    private Integer maximumPoolSize;

    @Value("${hikari.idle-timeout}")
    private Integer idleTimeout;

    @Value("${hikari.auto-commit}")
    private Boolean autoCommit;

    @Value("${hikari.max-lifetime}")
    private Integer maxLifetime;

    @Value("${hikari.connection-timeout}")
    private Integer connectionTimeout;

    @Value("${hikari.connection-test-query}")
    private String connectionTestQuery;


    @Bean
    public DataSource primaryDataSource() {
        HikariConfig config = new HikariConfig();
        // 數(shù)據(jù)源的驅(qū)動類型
        config.setDriverClassName(driverClassName);
        // 數(shù)據(jù)源的連接地址
        config.setJdbcUrl(url);
        // 數(shù)據(jù)源的用戶名
        config.setUsername(userName);
        // 數(shù)據(jù)源的密碼
        config.setPassword(password);
        // 連接池名字
        config.setPoolName(poolName);
        // 最小連接數(shù)
        config.setMinimumIdle(minimumIdle);
        // 最大連接數(shù)
        config.setMaximumPoolSize(maximumPoolSize);
        // 空閑連接存活最大時間,默認10分鐘
        config.setIdleTimeout(idleTimeout);
        // 此屬性控制從池中獲取的連接的默認自動提交行為,默認值:true
        config.setAutoCommit(autoCommit);
        // 此屬性控制池中連接的最長生命周期,值0表示無限生命周期,默認30分鐘
        config.setMaxLifetime(maxLifetime);
        // 數(shù)據(jù)庫連接超時時間,默認30秒
        config.setConnectionTimeout(connectionTimeout);
        // 連接測試query
        config.setConnectionTestQuery(connectionTestQuery);
        // 初始化 Hikari 連接池
        HikariDataSource ds = new HikariDataSource(config);
        return ds;
    }
}

最后啟動服務(wù),即可實現(xiàn)數(shù)據(jù)源的加載。此方案采用的是通過自定義配置文件完成連接池的手動初始化管理。

2.2、SpringBoot 整合 HicariCP(推薦)

在上文中,我們介紹了通過自定義配置文件來實現(xiàn)HicariCP的加載。其實也可以在 SpringBoot 的自動裝配下完成HicariCP的加載。

2.2.1、添加 jdbc 依賴庫

如果當(dāng)前版本是Spring Boot 2.0及以上的版本,HicariCP會作為默認的數(shù)據(jù)庫連接池組件。

當(dāng)添加spring-boot-starter-jdbc依賴包的時候,會自動添加HicariCP相關(guān)的依賴包,無需再次重復(fù)添加。

<!--  添加 jdbc 支持(默認含 HicariCP 依賴包) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

2.2.2、添加 HicariCP 相關(guān)的配置屬性

與上文不同,本次我們需要采用 Spring Boot 能識別的屬性配置,以便幫助自動完成HicariCP數(shù)據(jù)源的初始化。

# 添加hikari數(shù)據(jù)源配置
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.hikari.pool-name=HikariCP
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.idle-timeout=600000
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1

最后啟動服務(wù),即可實現(xiàn)數(shù)據(jù)源的加載。這種實現(xiàn)方式與上文介紹的方式效果一樣,并且配置更加簡單。

三、Druid

Druid 作為一個開源數(shù)據(jù)庫連接池組件,因其強大的監(jiān)控功能,在國內(nèi)應(yīng)用也非常廣泛。

在此,我們也介紹兩種方式來完成 Druid 連接池的配置初始化,以便于對它的使用有更清晰的理解。

  • 第一種:通過自定義配置文件加載 Druid
  • 第二種:SpringBoot 整合 Druid

3.1、自定義配置文件加載 Druid

3.1.1、添加 Druid 依賴庫

首先在pom.xml文件中,添加 Druid 依賴庫,內(nèi)容如下:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.17</version>
</dependency>

3.1.2、編寫 Druid 相關(guān)的配置屬性

然后在application.properties文件中,自定義 Druid 相關(guān)的配置屬性,內(nèi)容如下:

# 添加druid數(shù)據(jù)源配置
druid.driver-class-name=com.mysql.jdbc.Driver
druid.url=jdbc:mysql://localhost:3306/test
druid.username=root
druid.password=root
druid.initialSize=5
druid.minIdle=5
druid.maxActive=20
druid.maxWait=60000
druid.minEvictableIdleTimeMillis=300000
druid.timeBetweenEvictionRunsMillis=60000
druid.validationQuery=SELECT 1 FROM DUAL
druid.testWhileIdle=true
druid.testOnBorrow=false
druid.testOnReturn=false
druid.poolPreparedStatements=false
druid.filters=stat,wall
druid.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
druid.useGlobalDataSourceStat=true

3.1.3、編寫 DruidDataSource 初始化方法

接著創(chuàng)建一個DruidConfig,用于初始化DruidDataSource類并將其注入到 Bean 工廠中,內(nèi)容如下:

@Configuration
publicclass DruidConfig {

    privatestaticfinal Logger LOGGER = LoggerFactory.getLogger(DruidConfig.class);


    @Value("${druid.driver-class-name}")
    private String driverClassName;

    @Value("${druid.url}")
    private String url;

    @Value("${druid.username}")
    private String username;

    @Value("${druid.password}")
    private String password;

    @Value("${druid.initialSize}")
    private Integer initialSize;

    @Value("${druid.minIdle}")
    private Integer minIdle;

    @Value("${druid.maxActive}")
    private Integer maxActive;

    @Value("${druid.maxWait}")
    private Integer maxWait;

    @Value("${druid.minEvictableIdleTimeMillis}")
    private Integer minEvictableIdleTimeMillis;

    @Value("${druid.timeBetweenEvictionRunsMillis}")
    private Integer timeBetweenEvictionRunsMillis;

    @Value("${druid.validationQuery}")
    private String validationQuery;

    @Value("${druid.testWhileIdle}")
    privateboolean testWhileIdle;

    @Value("${druid.testOnBorrow}")
    privateboolean testOnBorrow;

    @Value("${druid.testOnReturn}")
    privateboolean testOnReturn;

    @Value("${druid.poolPreparedStatements}")
    privateboolean poolPreparedStatements;

    @Value("${druid.filters}")
    private String filters;

    @Value("${druid.connectionProperties}")
    private String connectionProperties;

    @Value("${druid.useGlobalDataSourceStat}")
    privateboolean useGlobalDataSourceStat;

    @Bean
    public DruidDataSource dataSourceDefault(){
        DruidDataSource datasource = new DruidDataSource();
        // 數(shù)據(jù)源的驅(qū)動類型
        datasource.setDriverClassName(driverClassName);
        // 數(shù)據(jù)源的連接地址
        datasource.setUrl(url);
        // 數(shù)據(jù)源的用戶名
        datasource.setUsername(username);
        // 數(shù)據(jù)源的密碼
        datasource.setPassword(password);
        // 初始化連接池大小
        datasource.setInitialSize(initialSize);
        // 設(shè)置最小連接數(shù)
        datasource.setMinIdle(minIdle);
        // 設(shè)置最大連接數(shù)
        datasource.setMaxActive(maxActive);
        // 設(shè)置獲取連接時的最大等待時間
        datasource.setMaxWait(maxWait);
        // 一個連接在池中最小生存的時間,單位是毫秒
        datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
        // 多久才進行一次檢測需要關(guān)閉的空閑連接,單位是毫秒
        datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
        // 檢測連接是否有效的 SQL語句
        datasource.setValidationQuery(validationQuery);
        // 申請連接時如果空閑時間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測連接是否有效,默認false,建議開啟,不影響性能
        datasource.setTestWhileIdle(testWhileIdle);
        // 申請連接時執(zhí)行validationQuery檢測連接是否有效,默認true,開啟后會降低性能
        datasource.setTestOnBorrow(testOnBorrow);
        // 歸還連接時執(zhí)行validationQuery檢測連接是否有效,默認false,開啟后會降低性能
        datasource.setTestOnReturn(testOnReturn);
        // 是否打開PSCache,oracle支持,Mysql不支持
        datasource.setPoolPreparedStatements(poolPreparedStatements);

        // druid監(jiān)控配置信息
        try {
            // 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計,'wall'用于防火墻
            datasource.setFilters(filters);
        } catch (SQLException e) {
            LOGGER.error("druid configuration initialization filter", e);
        }
        // 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
        datasource.setConnectionProperties(connectionProperties);
        // 合并多個DruidDataSource的監(jiān)控數(shù)據(jù)
        datasource.setUseGlobalDataSourceStat(useGlobalDataSourceStat);
        return datasource;
    }
}

3.1.4、編寫監(jiān)控服務(wù)初始化方法

在上文我們有說到,Druid 自帶強大的監(jiān)控服務(wù),通過相關(guān)配置類即可將其開啟,內(nèi)容如下:

@Configuration
publicclass DruidMonitorConfig {

    /**
     * 這里相當(dāng)于servlet的web.xml
     * @return
     */
    @Bean
    public ServletRegistrationBean<StatViewServlet> statViewServlet() {
        ServletRegistrationBean<StatViewServlet> bean =
                new ServletRegistrationBean<>(new StatViewServlet());
        // 添加映射
        bean.addUrlMappings("/druid/*");
        //設(shè)置一些初始化參數(shù)
        Map<String, String> initParas = new HashMap<>();
        initParas.put("loginUsername", "admin");
        initParas.put("loginPassword", "123456");
        //允許誰能防偽
        initParas.put("allow", "");//這個值為空或沒有就允許所有人訪問,ip白名單
        //initParas.put("allow","localhost");//只允許本機訪問,多個ip用逗號,隔開
        //initParas.put("deny","");//ip黑名單,拒絕誰訪問 deny和allow同時存在優(yōu)先deny
        initParas.put("resetEnable", "false");//禁用HTML頁面的Reset按鈕
        bean.setInitParameters(initParas);
        return bean;
    }


    /**
     * 配置一個過濾器,Servlet按上面的方式注冊Filter也可以這樣
     * @return
     */
    @Bean
    public FilterRegistrationBean<WebStatFilter> webStatFilter() {
        FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<>();
        //可以設(shè)置也可以獲取,設(shè)置一個阿里巴巴的過濾器
        bean.setFilter(new WebStatFilter());
        bean.addUrlPatterns("/*");
        //可以過濾和排除哪些東西
        Map<String, String> initParams = new HashMap<>();
        //把不需要監(jiān)控的過濾掉,這些不進行統(tǒng)計
        initParams.put("exclusions", "*.js,*.css,/druid/*");
        bean.setInitParameters(initParams);
        return bean;
    }
}

最后啟動服務(wù),即可實現(xiàn)數(shù)據(jù)源的加載。

同時,在瀏覽器訪問http://127.0.0.1:8080/druid/頁面,輸入在DruidMonitorConfig配置類中的賬號、密碼,即可登陸監(jiān)控服務(wù),查詢相關(guān) SQL 監(jiān)控看板,部分界面如下:

圖片圖片

3.2、SpringBoot 整合 Druid(推薦)

如果覺得以上配置很麻煩,也可以通過 SpringBoot 的自動裝配下完成Druid的加載。

3.2.1、添加 Druid-starter 依賴庫

首先添加druid-spring-boot-starter依賴包,通過它來完成配置參數(shù)自動裝配,內(nèi)容如下:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.17</version>
</dependency>

3.2.2、添加 Druid 相關(guān)的配置屬性

本次我們需要采用 Spring Boot 能識別的屬性配置,以便幫助自動完成Druid數(shù)據(jù)源的初始化。

# 添加druid數(shù)據(jù)源配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.pool-prepared-statements=false
# 以下是配置監(jiān)控信息(可選)
spring.datasource.druid.filter.stat.enabled=true
spring.datasource.druid.filter.stat.merge-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=5000
spring.datasource.druid.filter.wall.enabled=true
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=12345678
spring.datasource.druid.stat-view-servlet.reset-enable=false
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
spring.datasource.druid.web-stat-filter.exclusinotallow=*.js,*.css,/druid/*

最后啟動服務(wù),即可實現(xiàn)數(shù)據(jù)源的加載。效果等于通過自定義配置文件實現(xiàn)手動加載的結(jié)果。

四、小結(jié)

本文主要圍繞 Spring Boot 整合數(shù)據(jù)庫連接池組件,實現(xiàn)系統(tǒng)連接數(shù)的可控管理目標(biāo)進行一次知識內(nèi)容的整理和總結(jié)!

五、參考

1.https://zhuanlan.zhihu.com/p/460846041

2.https://developer.aliyun.com/article/1000769

責(zé)任編輯:武曉燕 來源: 潘志的技術(shù)筆記
相關(guān)推薦

2024-07-19 08:33:56

2025-08-05 08:13:19

2024-07-31 09:39:33

2017-06-08 15:38:41

2022-07-20 08:16:54

Lombokjava工具

2014-03-06 15:07:41

青橙小米

2020-01-18 14:55:03

架構(gòu)運維技術(shù)

2018-06-12 10:09:41

編程語言PythonJava

2010-05-28 11:21:17

2020-03-06 09:21:28

PWA原生應(yīng)用Web

2020-02-02 15:42:22

PythonC++編程語言

2022-08-24 08:00:00

Node.isJavaScriptDeno

2025-11-21 09:00:00

2018-08-15 08:33:33

編程Go語言開發(fā)

2023-08-09 18:08:35

ChatGPTStackOverflow

2017-11-13 15:38:03

VMwareOpenStack混合云

2017-01-11 14:38:39

編程語言Java

2015-12-08 13:48:50

大數(shù)據(jù)工具R語言Spark

2010-05-21 16:36:09

GoogleCode

2013-02-19 13:13:33

SurfaceiPad
點贊
收藏

51CTO技術(shù)棧公眾號

国产精品日韩精品中文字幕| 91香蕉在线观看| 视频一区二区三区在线| 一区二区三区美女xx视频| 国产精品视频黄色| 激情在线小视频| 懂色av一区二区三区蜜臀| 97在线视频免费| 中文字幕第20页| 二区三区精品| 午夜a成v人精品| 亚洲精品国产精品国自产观看 | 日韩精品欧美| 日韩久久久久久| 国产一区亚洲二区三区| 男女啪啪在线观看| 99精品偷自拍| 成人激情综合网| 三级黄色在线视频| 日韩欧美高清| 亚洲精品www久久久| 国产三级国产精品国产专区50| 青青在线视频| 欧美极品美女视频| 国产精品免费观看高清| 一区二区视频网| 在线亚洲激情| 久久天天躁狠狠躁夜夜躁| 亚洲AV无码国产精品| 宅男噜噜噜66国产精品免费| 狠狠综合久久av一区二区小说| 水蜜桃亚洲一二三四在线| 国产成人手机在线| 精品一二线国产| 国产精品国产福利国产秒拍| 久久精品99国产精| 日韩在线中文| 亚洲欧美一区二区激情| 男女性杂交内射妇女bbwxz| 欧美成人黄色| 欧美在线视频全部完| 欧美,日韩,国产在线| a级影片在线观看| 国产精品美女久久久久久久久| 久久精品二区| 欧美一级一区二区三区| 韩日精品视频一区| 国产精品久久久久不卡| 视频一区二区三区四区五区| 黄色精品网站| 久久久久成人精品| 久久一级黄色片| 亚洲综合专区| 久久中文久久字幕| 免费黄色激情视频| 久久一区91| 综合国产在线视频| 97在线观看免费视频| 日韩有码av| 日韩激情在线视频| jizz日本免费| 亚洲理论电影| 精品亚洲男同gayvideo网站| 精品国产一区在线| 最新国产一区二区| 精品成人a区在线观看| 91香蕉视频免费看| 亚洲精品一区二区三区中文字幕 | 麻豆国产欧美一区二区三区r| 欧美一区二区三区色| 亚洲天堂一区二区在线观看| 不卡精品视频| 日韩欧美一二三区| 无码成人精品区在线观看| 国产精品视频3p| 日韩成人在线视频网站| 久久亚洲AV成人无码国产野外 | 先锋影音网一区| av福利精品| 国产精品国模大尺度视频| 伊人久久大香线蕉午夜av| 日韩欧美小视频| 亚洲免费视频成人| www成人免费| 国产美女精品写真福利视频| 天天爽夜夜爽夜夜爽精品视频| 日韩小视频在线播放| 成人va天堂| 欧美日韩国产小视频在线观看| 亚洲第一天堂久久| 99这里只有精品视频| 日韩黄色av网站| 中文天堂资源在线| 欧美片第1页综合| 久久久久久亚洲精品| 亚洲男人的天堂在线视频| 视频一区二区中文字幕| 91亚洲精品一区| 国内爆初菊对白视频| 国产亚洲精品bt天堂精选| 伊人久久99| 波多野一区二区| 欧洲亚洲国产日韩| 日韩av成人网| 国产精品一国产精品| 日韩在线观看你懂的| 国产一级aa大片毛片| 石原莉奈一区二区三区在线观看| 成人淫片在线看| 色欲av永久无码精品无码蜜桃| 久久久久国产精品麻豆ai换脸 | 国产精品一区二区久久久久| 国产黄色一区二区| 国产亚洲精久久久久久| 日韩一级特黄毛片| 成人免费视频观看| 亚洲精品videossex少妇| 亚洲一区 欧美| 在线精品一区二区| 国产一区红桃视频| 青青色在线视频| 亚洲综合在线第一页| www.日日操| a级日韩大片| 日韩在线视频观看| 亚洲自拍一区在线观看| 国产高清久久久| 婷婷四月色综合| 亚洲女同志freevdieo| 日韩亚洲欧美综合| 午夜黄色福利视频| 久久久久久夜| 国产欧美日韩综合精品二区| 男人和女人做事情在线视频网站免费观看| 福利一区福利二区微拍刺激| 国产男女无遮挡猛进猛出| 欧美久久精品一级c片| 9.1国产丝袜在线观看| a网站在线观看| 国产精品剧情在线亚洲| 黄色片久久久久| 久久男人av| 欧美日韩第一视频| 国产乱淫片视频| 欧美激情一区二区三区蜜桃视频| 欧美激情 国产精品| 91精品导航| 欧美大秀在线观看| a级片免费观看| 亚洲人吸女人奶水| а 天堂 在线| 天天影视欧美综合在线观看| 国产精品色悠悠| 岛国视频免费在线观看| 色综合久久久久| 亚洲一级中文字幕| 欧美亚洲一级| 日韩高清三级| 免费观看成人性生生活片 | 91啦中文在线| 欧美特级限制片免费在线观看| 亚洲第一香蕉网| 日韩成人免费电影| 一级特黄录像免费播放全99| 成人四虎影院| 中文字幕精品在线视频| 影音先锋国产在线| 国产精品入口麻豆九色| 另类小说色综合| 日韩精品久久| 亚洲综合在线小说| av福利在线导航| 精品亚洲国产视频| 中文文字幕一区二区三三| 国产精品污网站| 欧美体内she精高潮| 欧美精品91| 国产一区二区三区无遮挡 | 国产精品综合久久久| 久热国产在线| 精品久久久久久久一区二区蜜臀| 日本少妇在线观看| 久久久亚洲精品一区二区三区| 日本激情视频在线| 日韩免费久久| 97人摸人人澡人人人超一碰| 美女的胸无遮挡在线观看| 亚洲午夜精品视频| 91麻豆成人精品国产免费网站| 亚洲柠檬福利资源导航| 日韩av无码一区二区三区不卡 | 亚洲精品一二三| 国产+高潮+白浆+无码| 亚洲欧美久久久| 特级西西444www大精品视频| 警花av一区二区三区| 久久久噜噜噜久噜久久| 国产永久av在线| 日韩一级大片在线| 一二三区免费视频| 亚洲免费观看高清完整版在线观看熊| 妖精视频一区二区| 日韩电影免费在线看| av在线免费观看国产| 欧美精品一二| 国产传媒一区二区三区| 亚州一区二区三区| 久久久久久久网站| 老司机99精品99| 精品丝袜一区二区三区| 99国产精品欲| 色婷婷精品久久二区二区蜜臀av| 色婷婷在线视频观看| 91丝袜呻吟高潮美腿白嫩在线观看| 日本xxxx黄色| 亚洲影音一区| 成人国产一区二区三区| 精品视频黄色| 国产在线一区二区三区四区| 国产精品亚洲一区二区在线观看| 日韩免费在线观看视频| 黑人玩欧美人三根一起进| 日韩一区二区精品视频| 日本福利片高清在线观看| 欧美大片一区二区三区| 中文字字幕在线中文乱码| 欧美性高潮床叫视频| 美女福利视频在线观看| 国产精品久久久久久久浪潮网站| 在线黄色免费网站| 国产成人福利片| www午夜视频| 久久夜色精品| 国产精品50p| 欧美一区视频| 亚洲第一精品区| 日韩aaaa| 视频在线精品一区| 国产一区不卡| 日本一区二区在线| 在线成人动漫av| 精品高清视频| 精品欧美午夜寂寞影院| 91久久久久久久久久| 伊人久久一区| 91免费视频网站| 不卡一区视频| 国产日韩在线看片| 欧美xxxx性| 91亚洲国产成人久久精品网站| 青草综合视频| 成人激情视频网| 日韩久久99| 成人免费福利在线| 日韩亚洲国产免费| 国产精品偷伦视频免费观看国产 | 欧美久久久久久久久久久| 国产精品一品视频| 欧美一级大片免费看| 国产成人日日夜夜| 最新日本中文字幕| 99免费精品视频| 国产肉体xxxx裸体784大胆| www.日韩av| 免费中文字幕av| 久久亚洲捆绑美女| 日本乱子伦xxxx| 欧美韩日一区二区三区四区| 国内精品卡一卡二卡三| 国产精品久久久久久福利一牛影视| 久久精品三级视频| 最近中文字幕一区二区三区| 永久免费未视频| 亚洲精品v日韩精品| 国产在线拍揄自揄拍| 欧美日韩亚洲成人| 亚洲图片欧美日韩| 91麻豆精品国产91久久久更新时间| 国产成人三级在线播放| 亚洲第一天堂av| 可以在线观看的黄色| 最近2019年好看中文字幕视频| 日本中文字幕在线2020| 欧美成人免费播放| 免费高潮视频95在线观看网站| 日本a级片电影一区二区| 国产精品久久久久久吹潮| 亚洲xxxx做受欧美| 欧美日韩大片免费观看| 日韩免费中文专区| 国内精品久久久久久久影视麻豆| 少妇无码av无码专区在线观看 | 夜夜爽夜夜爽精品视频| 成人免费区一区二区三区| 欧美系列在线观看| 性猛交xxxx乱大交孕妇印度| 亚洲久久久久久久久久| 黄av在线免费观看| 国语自产在线不卡| 黄色日韩网站| 精品国产乱码久久久久软件| 成人影视亚洲图片在线| 91网站在线观看免费| 丝瓜av网站精品一区二区| 日本人dh亚洲人ⅹxx| 久久婷婷一区二区三区| 欧美成人免费看| 欧美这里有精品| 四虎精品一区二区三区| 久久精品视频在线播放| 超级碰碰久久| 99re国产视频| 不卡在线一区二区| 自慰无码一区二区三区| 激情综合色丁香一区二区| 18禁裸乳无遮挡啪啪无码免费| 亚洲精品免费视频| 久久国产香蕉视频| 日韩av在线免费观看| 91小视频xxxx网站在线| 国产精品香蕉av| 日本福利一区| 欧美图片激情小说| 国内精品久久久久影院一蜜桃| 三上悠亚影音先锋| 亚洲大片一区二区三区| 国产美女www爽爽爽视频| 国产一区二区三区在线看| 啊啊啊久久久| 99高清视频有精品视频| 久久久久蜜桃| 国产wwwxx| 久久亚洲一级片| 久久精品国产成人av| 欧美xxxx在线观看| 成人黄色网址| 成人免费高清完整版在线观看| 成人女性视频| 88av.com| 久久久久青草大香线综合精品| 日本午夜小视频| 欧美一级免费大片| 在线观看中文| 91精品国自产在线观看| 综合久久婷婷| 绯色av蜜臀vs少妇| 亚洲国产va精品久久久不卡综合| 成人黄色免费视频| 欧美激情图片区| 精品福利一区| 欧美啪啪免费视频| 26uuu久久天堂性欧美| a v视频在线观看| 精品视频在线播放免| 范冰冰一级做a爰片久久毛片| 欧美精品一区在线| 日韩精品亚洲专区| 国产黄色片在线| 欧美一区二区三区在| 尤物yw193can在线观看| 成人免费在线看片| 99国产成+人+综合+亚洲欧美| 国产熟女高潮一区二区三区| 欧美视频不卡中文| 久草在线青青草| 国产日韩欧美影视| 欧美搞黄网站| 99re久久精品国产| 色94色欧美sute亚洲线路一久 | 九九精品在线播放| 高清精品视频| 国产一区亚洲二区三区| 国产精品美女久久久久aⅴ | 亚洲成人1234| 一区二区三区短视频| 四虎影院一区二区三区 | 7788色淫网站小说| 色网综合在线观看| 男女啪啪在线观看| 国内视频一区二区| 天堂久久一区二区三区| www男人天堂| 亚洲欧美国产77777| 亚洲影院一区二区三区| 欧美成人中文字幕在线| 日本精品影院| 国产v亚洲v天堂无码久久久| 国产精品第四页| 亚洲AV无码精品国产| 琪琪第一精品导航| 精品视频网站| 波多野结衣三级视频| 狠狠躁夜夜躁人人爽天天天天97 | 国产精品美女久久久久av福利| 亚洲青涩在线| 国产视频123区| 欧美成人精品二区三区99精品| 最近高清中文在线字幕在线观看1| 日韩精品一区二区三区外面 | 日韩美女一级视频|