14.1go操作mysql数据库(database/sql)

一、database/sql 包对数据库的连接

  • 提供了 sql.Open 函数用于打开数据库连接。
  • 通过 sql.DB 类型管理连接池,支持高效地处理并发请求。
  1. 连接池管理
    • sql.DB 维护一组活跃的数据库连接,这些连接可以被多个goroutine共享。
    • 当需要执行数据库操作时,sql.DB 会从连接池中分配一个可用连接,操作完成后将连接返回到池中。
  2. 并发安全
    • sql.DB 是并发安全的,多个goroutine可以同时使用它来执行数据库操作。
  3. 连接复用
    • 连接池中的连接可以被复用,避免了频繁创建和销毁连接的开销。
  4. 连接限制
    • 通过配置 SetMaxOpenConns 和 SetMaxIdleConns,可以控制连接池的大小和空闲连接的数量。

二、sql.DB 的连接池机制

1. 连接池的工作流程

  • 获取连接: 当调用 db.Querydb.Exec 等方法时,sql.DB 会从连接池中获取一个可用连接。如果池中没有可用连接且未达到最大连接数限制,则会创建一个新连接。

  • 释放连接: 当数据库操作完成后,连接会被返回到连接池中,供后续操作复用。

  • 空闲连接管理: 如果连接池中有空闲连接,它们会保持打开状态,直到超过最大空闲时间(通过 SetConnMaxIdleTime 设置)或达到最大空闲连接数(通过 SetMaxIdleConns 设置)。

2. 连接池的配置

  • SetMaxOpenConns: 设置连接池中最大打开的连接数。默认值为 0,表示无限制。

    db.SetMaxOpenConns(10)

  • SetMaxIdleConns: 设置连接池中最大空闲连接数。默认值为 2

    db.SetMaxIdleConns(5)

  • SetConnMaxLifetime: 设置连接的最大存活时间。超过该时间的连接会被关闭并重新创建。默认值为 0,表示无限制。

    db.SetConnMaxLifetime(time.Hour)

  • SetConnMaxIdleTime: 设置连接的最大空闲时间。超过该时间的空闲连接会被关闭。默认值为 0,表示无限制。

    db.SetConnMaxIdleTime(30 * time.Minute)


三、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chxii

小小打赏,大大鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值