Maison > développement back-end > Golang > Comment configurer le pool de connexions pour la connexion à la base de données Golang ?

Comment configurer le pool de connexions pour la connexion à la base de données Golang ?

王林
Libérer: 2024-06-06 11:21:00
original
1067 Les gens l'ont consulté

Comment configurer le pool de connexions pour la connexion à la base de données Go ? Créez une connexion à la base de données en utilisant le type DB dans le package base de données/sql ; définissez MaxOpenConns pour contrôler le nombre maximum de connexions simultanées ; définissez MaxIdleConns pour définir le nombre maximum de connexions inactives ; définissez ConnMaxLifetime pour contrôler le cycle de vie maximal de la connexion ;

如何为 Golang 数据库连接配置连接池?

Comment configurer le pool de connexion pour la connexion à la base de données Go ?

Préface
Lors de l'écriture de programmes Go impliquant des opérations de base de données, le pooling de connexions est une technique efficace pour optimiser la gestion des connexions et améliorer les performances des applications. Il réduit la surcharge liée à l'établissement de nouvelles connexions en créant et en gérant les connexions à la base de données à l'avance.

Implémentation du pool de connexions
Go fournit le package natif database/sql, qui contient le type DB, qui fournit la fonction de pool de connexions. Vous pouvez configurer un pool de connexions pour l'objet DB en suivant les étapes suivantes : database/sql,其中包含 DB 类型,它提供了连接池功能。可以通过以下步骤为 DB 对象配置连接池:

代码示例:

package main

import (
    "database/sql"
    "log"

    _ "github.com/go-sql-driver/mysql"
)

func main() {
    // 连接字符串
    connectionString := "user:password@tcp(host:port)/database"

    // 打开数据库连接,配置连接池
    db, err := sql.Open("mysql", connectionString)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // 设置最大并发连接数
    db.SetMaxOpenConns(10)

    // 设置最大空闲连接数
    db.SetMaxIdleConns(5)

    // 设置最大连接生命周期
    db.SetConnMaxLifetime(time.Minute * 5)
}
Copier après la connexion

实战案例
我们以 MySQL 数据库为例来演示如何配置连接池。假设我们有一个名为 product

Exemple de code :

package main

import (
    "context"
    "database/sql"
    "fmt"
    "log"

    _ "github.com/go-sql-driver/mysql"
)

func main() {
    // 连接字符串
    connectionString := "user:password@tcp(host:port)/database"

    // 打开数据库连接,配置连接池
    db, err := sql.Open("mysql", connectionString)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // 查询所有产品记录
    rows, err := db.QueryContext(context.Background(), "SELECT * FROM product")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()

    // 遍历结果行
    for rows.Next() {
        // 获取每行的值
        var id int
        var name string
        if err := rows.Scan(&id, &name); err != nil {
            log.Fatal(err)
        }

        // 打印结果
        fmt.Printf("Id: %d, Name: %s\n", id, name)
    }
}
Copier après la connexion

Cas pratique

🎜Nous prenons la base de données MySQL comme exemple pour montrer comment configurer le pool de connexions. Supposons que nous ayons une table appelée product et que nous souhaitions obtenir tous les enregistrements de produits. 🎜🎜🎜Exemple de code : 🎜🎜rrreee🎜Dans cet exemple, nous créons un pool de connexions et l'utilisons pour effectuer des requêtes de base de données. En configurant le pooling de connexions, nous optimisons la gestion des connexions aux bases de données et améliorons les performances des applications, en particulier dans les environnements à forte concurrence. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal