Initial commit
This commit is contained in:
110
db.go
Normal file
110
db.go
Normal file
@ -0,0 +1,110 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"github.com/redis/go-redis/v9"
|
||||
)
|
||||
|
||||
type DBManager struct {
|
||||
MySQL *sql.DB
|
||||
Redis *redis.Client
|
||||
}
|
||||
|
||||
// dbInstance holds the single instance of DBManager
|
||||
var dbInstance *DBManager
|
||||
var oncedb sync.Once
|
||||
|
||||
// GetDBManager provides a global access point to the DBManager instance
|
||||
func GetDBManager() (*DBManager, error) {
|
||||
oncedb.Do(func() {
|
||||
config, _ := GetConfigManager()
|
||||
dbInstance = &DBManager{}
|
||||
initError = initDBManager(dbInstance, config)
|
||||
})
|
||||
return dbInstance, initError
|
||||
}
|
||||
|
||||
// initDBManager initializes the DBManager instance with database connections
|
||||
func initDBManager(dbManager *DBManager, config *ConfigManager) error {
|
||||
// 初始化 MySQL 连接
|
||||
//dsn := "username:password@tcp(localhost:3306)/aigrammar?parseTime=true"
|
||||
dsn := fmt.Sprintf("%s:%s@tcp(%s)/aigrammar?parseTime=true",
|
||||
config.GetDatabaseConfig().MysqlUser,
|
||||
config.GetDatabaseConfig().MysqlPass,
|
||||
config.GetDatabaseConfig().MysqlConn,
|
||||
)
|
||||
db, err := sql.Open("mysql", dsn)
|
||||
if err != nil {
|
||||
log.Fatalf("Error opening MySQL database: %v", err)
|
||||
return errors.New("Error opening MySQL database:")
|
||||
}
|
||||
db.SetMaxOpenConns(25)
|
||||
db.SetMaxIdleConns(10)
|
||||
db.SetConnMaxLifetime(time.Minute * 5)
|
||||
dbManager.MySQL = db
|
||||
|
||||
// 初始化 Redis 连接
|
||||
rdb := redis.NewClient(&redis.Options{
|
||||
Addr: config.GetDatabaseConfig().RedisConn,
|
||||
Password: "", // no password set
|
||||
DB: 0, // use default DB
|
||||
PoolSize: 10, // 连接池大小
|
||||
})
|
||||
|
||||
dbManager.Redis = rdb
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *DBManager) CloseDB() {
|
||||
db.MySQL.Close()
|
||||
db.Redis.Close()
|
||||
}
|
||||
|
||||
/*
|
||||
func NewDBManager(config *ConfigManager) (*DBManager, error) {
|
||||
dbManager := &DBManager{}
|
||||
|
||||
// 初始化 MySQL 连接
|
||||
//dsn := "username:password@tcp(localhost:3306)/aigrammar?parseTime=true"
|
||||
dsn := fmt.Sprintf("%s:%s@tcp(%s)/aigrammar?parseTime=true",
|
||||
config.GetDatabaseConfig().MysqlUser,
|
||||
config.GetDatabaseConfig().MysqlPass,
|
||||
config.GetDatabaseConfig().MysqlConn,
|
||||
)
|
||||
db, err := sql.Open("mysql", dsn)
|
||||
if err != nil {
|
||||
log.Fatalf("Error opening MySQL database: %v", err)
|
||||
return nil, errors.New("Error opening MySQL database: %v", err)
|
||||
}
|
||||
db.SetMaxOpenConns(25)
|
||||
db.SetMaxIdleConns(10)
|
||||
db.SetConnMaxLifetime(time.Minute * 5)
|
||||
dbManager.MySQL = db
|
||||
|
||||
// 初始化 Redis 连接
|
||||
rdb := redis.NewClient(&redis.Options{
|
||||
Addr: config.GetDatabaseConfig().RedisConn,
|
||||
Password: "", // no password set
|
||||
DB: 0, // use default DB
|
||||
PoolSize: 10, // 连接池大小
|
||||
})
|
||||
|
||||
dbManager.Redis = rdb
|
||||
|
||||
return dbManager, nil
|
||||
}
|
||||
|
||||
func (db *DBManager) CloseDB() {
|
||||
db.MySQL.Close()
|
||||
db.Redis.Close()
|
||||
}
|
||||
|
||||
*/
|
||||
Reference in New Issue
Block a user