编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

HikariCP介绍(hikaricp github)

wxchong 2024-11-03 15:28:14 开源技术 28 ℃ 0 评论

为什么要用连接池

连接池是后端开发常用到的技术,为什么需要连接池,从TCP链接请求来讲。服务器跟数据库没有部署在同一个环境服务器上,每次获取数据查询数据库要先建立连接,即TCP链接,建立连接需要3次握手,那么就需要消耗掉一些时间,TCP有慢启动的机制,但是对于一次查询可能还不止1次TCP请求,查询效率低下。为了解决数据库连接慢的问题,就需要维护一些长链接,因此不用每次都去建立连接,建立连接除了占用一定的时间,还有其它资源的消耗。连接池还能让我们更方便管理,可以避免数据库资源都被多个API占用,同时可以避免资源泄露。

HikariCP是谁开发的

HikariCP是由日本程序员开源的一个数据库连接池组件,代码非常轻量,并且速度非常的快。根据官方提供的数据,在i7,开启32个线程32个连接的情况下,进行随机数据库读写操作,HikariCP的速度是现在常用的C3P0数据库连接池的数百倍。在SpringBoot2.0中,官方也是推荐使用HikariCP。

HikariCP快的原因

1.字节码更加精简,所以可以加载更多代码到缓存。

2.实现了一个无锁的集合类型,来减少并发造成的资源竞争。

3.使用了自定义的数组类型,对于ArrayList极大地提升了性能。

4.自定义集合类型(ConcurrentBag):提高并发读写的效率

5.针对CPU的时间片算法进行优化,尽可能在一个时间片里面完成各种操作。

spring:
  datasource:
    name: database-a
    driver-class-name: com.mysql.cj.jdbc.Driver # MySQL 驱动,这里根据引入的 mysql-connector-java 包版本选择不同的 Driver, 8.x 需要用 cj
    url: jdbc:mysql://mysql:3306/database-a?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&allowMultiQueries=true
    username: root
    password: 1
    type: com.zaxxer.hikari.HikariDataSource # JDBC 连接池类型:HikariCP
    //自定义配置
    hikari:
      connection-timeout: 30000     # 等待连接池分配链接的最大时长(毫秒),超过这个时长还没有可用的连接则发生 SQLException,默认:30 秒
      minimum-idle: 5               # 最小连接数
      maximum-pool-size: 20         # 最大连接数
      auto-commit: true             # 自动提交
      idle-timeout: 600000          # 连接超时的最大时长(毫秒),超时则被释放(retired),默认:10 分钟
      pool-name: DataSourceHikariCP # 连接池名称
      max-lifetime: 1800000         # 连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认: 30 分钟
      connection-test-query: select 1

配置参数说明

  • 使用率较高

autoCommit:用于控制从池中返回连接的默认自动提交行为,默认为true

connectionTimeout:客户端等待池中连接的最大时间(毫秒),超时则会抛出 -SQLException,最低可接受时间为 250ms,默认值为30000ms

idleTimeout:池中连接保持空闲状态的最长时间,只有在定义的minimumIdle 小于- – maximumPoolSize时生效,允许的最小时间为 10000ms。默认为 600000ms

keepaliveTime:用于控制 HikariCP 中空闲线程的最大存活时间,该值必须小于- - - - maxLifetime,最小为 30000ms。默认为 0 (disabled)

maxLifetime:控制连接池中连接的最长时间,正在使用的连接不会被删除,只有当其关闭连接后才会被删除,当设置为 0 时表示永不删除,最小允许值为 30000ms。 默认值为 1800000ms

connectionTestQuery:当使用的驱动为 JDBC4 不建议设置该项。

minimumIdle:控制 HikariCP 中维护的最小空闲连接数。当空闲连接数小于 - - - – - minimumIdle 并且池中的总连接数少于 maximumPoolSize 时,HikariCP 将添加其他连接直到 maximumPoolSize。为了获得最佳性能和对峰值需求的响应能力建议不要设置此值。 默认值与 maximumPoolSize 相同

maximumPoolSize:连接池中的最大连接数。默认为 10

metricRegistry:该项仅在编程式配置或IoC容器中使用,允许指定一个 Codahale/Dropwizard MetricRegistry 的实例来记录池中的各项指标

healthCheckRegistry:同上,用于报告当前连接池的健康状况

poolName:定义连接池的名称,可以在日志或控制台识别连接池

  • 不常使用

initializationFailTimeout:允许初始化失败的次数。默认值为 1

isolateInternalQueries:控制 HikariCP 是否在其自己的事务中隔离内部池查询,仅在禁用 autoCommit 时适用。默认值为 false

allowPoolSuspension:控制连接池是否可以通过JMX暂停和恢复,当连接池暂停时,对 getConnection() 的调用永不超时,直到连接池恢复。默认为 false

readOnly:控制从池中获取的连接是否默认为只读。默认为 false

registerMbeans:控制是否注册JMX Management Bean (MBean)。默认值为 false

catalog:为支持目录概念的数据库设置默认目录。如果未指定此属性,则使用 JDBC 驱动程序定义的默认目录。默认值为 driver default

connectionInitSql:设置一个 SQL 语句,该语句将在每次创建新连接后执行,然后再将其添加到池中。如果此 SQL 无效或引发异常,它将被视为连接失败,并且将遵循标准的重试逻辑。

driverClassName:HikariCP 将尝试通过基于 jdbcUrl 的 DriverManager 解析驱动程序,但对于一些较旧的驱动程序,必须指定 driverClassName

transactionIsolation:控制从池中返回连接的默认事务隔离级别。如果未指定此属性,则使用 JDBC 驱动定义的默认事务隔离级别。默认值为 driver default

validationTimeout:控制用于测试连接的最长存活时间,该值必须小于 - - - connectionTimeout,最短时间为 250ms。默认值为 5000ms

leakDetectionThreshold:控制在log日志记录可能发生连接泄漏的消息之前,连接可以离开池的时间。值为 0 表示禁用泄漏检测。启用泄漏检测的最低时间为 2000ms。 默认值为 0

dataSource:仅可通过编程式配置或IoC容器使用。通过此属性可以直接设置 DataSource 要由池包装的的实例,而不必让 HikariCP 通过反射进行构造

schema:为支持 schema 概念的数据库设置默认的 schema,如果未指定此属性,则使用 JDBC 驱动定义的默认模式。

threadFactory:仅可通过编程式配置或IoC容器使用。此属性允许通过 java.util.concurrent.ThreadFactory 创建池使用的所有线程

scheduledExecutor:仅可通过编程式配置或IoC容器使用。此属性允许通过 java.util.concurrent.ScheduledExecutorService 设置实将用于各种内部任务的调度。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表