精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

又大又硬又爽免费视频| 国产日韩中文字幕| 日韩av在线看免费观看| 国产精品美女午夜爽爽| 一区二区三区日韩欧美| 久久国产精品免费一区| 一区二区三区免费在线视频| 国产真实久久| 在线视频欧美性高潮| 一区二区久久精品| 亚洲风情在线资源| 亚洲欧美国产毛片在线| 欧美1o一11sex性hdhd| 国产精品无码在线播放| 久久精品麻豆| 欧美激情视频在线| 黄大色黄女片18免费| 国产一区二区三区不卡av| 欧美日韩大陆在线| 国产精品视频一区二区三区四区五区| wwwav在线| 国产午夜亚洲精品羞羞网站| 成人在线资源网址| 91中文字幕在线播放| 免费日韩av| 久久青草精品视频免费观看| 肉色超薄丝袜脚交69xx图片| 在线成人动漫av| 精品欧美乱码久久久久久1区2区| 九九热精品在线播放| 欲香欲色天天天综合和网| 亚洲黄色免费网站| 亚洲资源视频| wwwxxx在线观看| 91麻豆免费看片| 国产a一区二区| 夜夜躁日日躁狠狠久久av| 国产日韩一区| 国内精品国产三级国产在线专| 久久国产高清视频| 国产韩日影视精品| 中文字幕亚洲一区二区三区| 麻豆国产精品一区| 国产成人在线中文字幕| 日韩欧美国产综合一区| www.欧美激情.com| 四虎影视成人精品国库在线观看 | 成人午夜免费av| 亚洲综合在线中文字幕| 国产免费不卡av| 韩国av一区二区| 国产一区二区香蕉| 国产精品久久久久久久久毛片| 美日韩一区二区三区| 国产精品久久中文| 一二三区中文字幕| 国产一区91精品张津瑜| 91在线播放国产| 国产黄色一区二区| 成人听书哪个软件好| 国产精品久久国产精品| 天天操天天干天天干| 91丨porny丨最新| 久久国产精品亚洲va麻豆| 麻豆国产在线播放| 国产欧美精品日韩区二区麻豆天美| 欧美精品七区| 日本视频在线免费观看| 中文字幕一区不卡| 欧美一级中文字幕| www视频在线观看| 色呦呦网站一区| 污污网站免费看| 国产免费区一区二区三视频免费| 日韩天堂在线观看| www.男人天堂| 欧美伦理在线视频| 北条麻妃久久精品| 国产一级做a爰片在线看免费| 亚洲毛片视频| 国产成人精品一区二区在线| 亚洲综合精品国产一区二区三区 | 欧美天天影院| 亚洲综合一区在线| 日本免费一级视频| 日韩成人综合网| 亚洲国产91色在线| 阿v天堂2014| 欧美日一区二区在线观看 | 久久久99精品视频| 中文字幕色婷婷在线视频| 欧美日韩视频在线一区二区 | 最近日韩免费视频| 国产一区 二区 三区一级| 国内视频一区| 在线观看免费网站黄| 玉足女爽爽91| 成人精品视频一区二区| 精品一区91| 精品亚洲男同gayvideo网站| 精品女人久久久| 亚洲激情女人| 成人免费xxxxx在线观看| 国产成人三级在线观看视频| 欧美国产日本视频| 青青草成人免费在线视频| 国产激情欧美| 日韩电影中文字幕av| 三级影片在线看| 日韩精品一二区| 精品视频在线观看| 在线视频国产区| 精品视频在线免费观看| 亚洲天堂资源在线| 欧美jjzz| 国产欧美中文字幕| 国产系列在线观看| 亚洲va在线va天堂| av地址在线观看| 999成人网| 国产精品一二区| 欧美白人做受xxxx视频| 亚洲成人精品一区| 特级黄色片视频| 91综合网人人| 国产精品久久久久久久久久久新郎| 男人天堂av网| 亚洲综合清纯丝袜自拍| 午夜福利123| 色999国产精品| 国产精品久久77777| 天堂成人在线| 偷拍日韩校园综合在线| 黑森林av导航| 黄色精品一区| 超碰在线观看97| 国产日产一区二区三区| 欧美亚洲高清一区二区三区不卡| 3d动漫精品啪啪一区二区下载| 狠狠爱www人成狠狠爱综合网 | 亚洲一区二区三区四区电影| 色七七影院综合| 国产乱码在线观看| 国产日韩三级在线| 欧美私人情侣网站| 亚洲三级网页| 国产精品电影在线观看| 成人高清在线| 欧美日韩一级二级| 黑人狂躁日本娇小| 国产在线日韩欧美| 中文字幕在线乱| 精品国产欧美| 欧美黄色www| 丰满人妻一区二区三区无码av| 亚洲影院理伦片| 最新中文字幕日本| 亚洲国产裸拍裸体视频在线观看乱了中文 | 日韩福利视频| 久久亚洲国产精品尤物| 日韩一区二区av| 国产国语亲子伦亲子| 亚洲一级二级三级| 无码一区二区精品| 久久久999| 在线免费观看成人| 大陆精大陆国产国语精品| 97在线视频免费| 国产视频福利在线| 91精品国产乱码| 国产一级黄色av| 久久综合给合久久狠狠狠97色69| 久久久精品三级| 欧美ab在线视频| 免费成人av网站| 亚洲国产一区二区久久| 理论片在线不卡免费观看| 亚洲精品第五页| 日韩欧美亚洲综合| 日韩在线一卡二卡| av亚洲产国偷v产偷v自拍| 欧美污视频网站| 99国产精品免费视频观看| 国产精品一区视频网站| free欧美| 欧美夫妻性生活xx| 邻居大乳一区二区三区| 欧美一区二区三区四区高清| 国产成人在线观看网站| 国产精品久久久久久久久图文区 | 欧美在线亚洲在线| 日本蜜桃在线观看| 日韩激情av在线播放| 91丨porny丨在线中文| 午夜精品福利久久久| 五月婷婷综合激情网| 成人av资源站| 污污的视频免费| 中文亚洲免费| 蜜臀av.com| 不卡av一区二区| 国产欧美一区二区视频| 日韩一区二区三免费高清在线观看| 久久久久久伊人| 在线a免费看| 亚洲精品一区av在线播放| 精品二区在线观看| 欧美午夜在线观看| 欧美三级午夜理伦| 一区二区三区四区激情| 亚洲最大成人综合网| www.欧美.com| 一级全黄裸体片| 加勒比av一区二区| 日韩欧美黄色大片| 国产日韩一区| av网站大全免费| 欧美一区二区三区免费看| 午夜精品一区二区三区在线观看| 精品一区二区男人吃奶| 亚洲最大的成人网| 四虎视频在线精品免费网址| 国产精品久久久久久久久久| 亚洲欧美韩国| 2020国产精品视频| а√天堂中文在线资源8| 欧美激情第99页| 自拍亚洲图区| 久久亚洲综合国产精品99麻豆精品福利| 国产在线日本| 亚洲女人天堂成人av在线| 日韩一区二区三区不卡| 精品久久久久久久人人人人传媒 | 波多野结衣电影在线播放| 精品成人久久av| 日韩欧美三级视频| 亚洲国产成人av好男人在线观看| 一区二区视频免费看| 亚洲色图视频免费播放| 午夜精品久久久久99蜜桃最新版| 国产欧美日韩在线视频| 国产全是老熟女太爽了| wwwwww.欧美系列| 中国毛片在线观看| 久久久久久久综合日本| 免费在线观看你懂的| 久久久久久久久久久久久久久99 | 亚洲成人动漫一区| 日本网站在线播放| 欧美日韩免费看| 免费观看日批视频| 在线观看www91| 亚洲天天综合网| 这里只有精品免费| 性少妇videosexfreexxx片| 日韩免费视频一区二区| 内射后入在线观看一区| 亚洲精品av在线播放| 男人av在线| 中文字幕亚洲无线码a| 成人av免费| 午夜美女久久久久爽久久| 中文字幕乱码在线播放| 国产精品日韩欧美大师| 国产精品免费精品自在线观看| 亚洲xxxx做受欧美| 久久中文字幕导航| 色噜噜狠狠一区二区三区| 久久精品高清| 久草免费福利在线| 免费在线亚洲| 国产无色aaa| youjizz国产精品| 中文字幕网站在线观看| 亚洲天堂免费看| 日本亚洲色大成网站www久久| 色婷婷国产精品| 国产又粗又黄又爽的视频| 欧美成人三级在线| 国产中文在线| 插插插亚洲综合网| 中文字幕资源网在线观看免费| 国产精品美乳一区二区免费| 日韩欧美久久| 欧美高清性xxxxhd| 亚洲五月综合| 国产综合免费视频| 国产一区二区三区免费观看| 亚洲天堂资源在线| 亚洲特黄一级片| 99精品在线播放| 日韩欧美卡一卡二| 黄色av免费在线看| 欧美极品少妇xxxxⅹ喷水| 欧美日韩五码| 国产精品一 二 三| 手机在线电影一区| 欧美日韩国产精品激情在线播放| 久久97超碰色| 亚洲熟妇一区二区三区| 一区二区三区四区视频精品免费 | 按摩亚洲人久久| 九色porny丨首页入口在线| 亚洲tv在线观看| jlzzjlzz亚洲女人| 国产视频九色蝌蚪| 国产精品一区免费视频| 国产成人免费观看网站| 精品福利免费观看| 亚洲成人第一区| www国产亚洲精品久久网站| 日本免费一区二区六区| 成人免费视频网站入口| 欧美激情欧美| 亚洲高清在线免费观看| 91香蕉视频mp4| 久久久久香蕉视频| 欧美一区二区三区四区五区| 日韩免费啪啪| 国产精品电影观看| 图片婷婷一区| 欧美成人高潮一二区在线看| 国产成人av影院| 婷婷激情四射网| 欧美日韩精品二区第二页| 国产小视频免费在线观看| 欧美中文字幕在线播放| 福利欧美精品在线| 91传媒免费视频| 国产精品一区二区在线看| 国产日韩欧美在线观看视频| 欧美日韩三级视频| 91伦理视频在线观看| 国产精品久久久久7777婷婷| 蜜乳av综合| 999精品网站| 久久久不卡影院| 久久久久久久久久一级| 亚洲色图第三页| 日韩不卡免费高清视频| 日本最新一区二区三区视频观看| 丝袜美腿亚洲综合| 国产高清一区二区三区四区| 91国产丝袜在线播放| 黄色在线网站| 国产精品爽爽爽| 国产精品久久久久一区二区三区厕所| 久久国产激情视频| 亚洲欧洲日本在线| 国产免费无遮挡| 欧美黄色片在线观看| 精品人人人人| 成人av一级片| 日本一区二区三区国色天香| 中文字幕乱伦视频| 北条麻妃99精品青青久久| 国产精品成人**免费视频| 国产日韩第一页| 国产999精品久久| 99久热在线精品996热是什么| 精品无人国产偷自产在线| 91精品店在线| 色乱码一区二区三区熟女| 国产福利一区二区三区| 日本在线观看中文字幕| 亚洲色图狂野欧美| 四虎国产精品永久在线国在线| 女女同性女同一区二区三区按摩| 成人精品一区二区三区四区| 黄色小说在线观看视频| 精品无人区乱码1区2区3区在线| 成人精品国产亚洲| 777久久精品一区二区三区无码| 丁香天五香天堂综合| 日本在线播放视频| 最近2019好看的中文字幕免费| 久久夜夜久久| 波多野结衣之无限发射| 国产精品丝袜黑色高跟| 亚洲国产999| 国产精品吹潮在线观看| 综合激情在线| 国产精品无码一区二区三区| 91精品在线一区二区| 2018av在线| 中文字幕欧美日韩一区二区三区| 国产999精品久久久久久| 亚洲综合成人av| 欧美肥婆姓交大片| 日韩精品久久| 中文字幕在线播放一区| 欧美日韩精品一区二区三区| 波多野结衣精品| 相泽南亚洲一区二区在线播放| 国产成人啪免费观看软件| 波多野结衣mp4| 97在线视频免费| 中文字幕日韩欧美精品高清在线| 野外性满足hd| 欧美mv和日韩mv的网站|