This commit is contained in:
李子铭 2025-03-20 15:28:26 +08:00
parent 5a438ce485
commit bbf8875e30
5 changed files with 76 additions and 19 deletions

View File

@ -10,17 +10,17 @@ data:
driver: mysql driver: mysql
source: root:lansexiongdi6,@tcp(47.97.27.195:3306)/voucher?parseTime=True&loc=Local source: root:lansexiongdi6,@tcp(47.97.27.195:3306)/voucher?parseTime=True&loc=Local
maxIdle: 100 #最大的空闲连接数 maxIdle: 100 #最大的空闲连接数
maxOpen: 2000 #最大连接数0表示不受限制 maxOpen: 1000 #最大连接数0表示不受限制
maxLifetime: 30s #连接复用的最大生命周期 maxLifetime: 300s #连接复用的最大生命周期
isDebug: false isDebug: false
redis: #没有则注释此属性 redis: #没有则注释此属性
addr: 47.97.27.195:6379 addr: 47.97.27.195:6379
password: lansexiongdi@666 password: lansexiongdi@666
readTimeout: 5s readTimeout: 5s
writeTimeout: 5s writeTimeout: 5s
poolSize: 30 #连接池大小不配置或配置为0表示不启用连接池 poolSize: 100 #连接池大小不配置或配置为0表示不启用连接池
minIdleConns: 10 #最小空闲连接数 minIdleConns: 50 #最小空闲连接数
connMaxIdleTime: 30s #每个连接最大空闲时间,如果超过了这个时间会被关闭 connMaxIdleTime: 60s #每个连接最大空闲时间,如果超过了这个时间会被关闭
db: 3 db: 3
rocketMQ: rocketMQ:

View File

@ -9,18 +9,18 @@ data:
db: db:
driver: mysql driver: mysql
source: root:lansexiongdi6,@tcp(47.97.27.195:3306)/voucher?parseTime=True&loc=Local source: root:lansexiongdi6,@tcp(47.97.27.195:3306)/voucher?parseTime=True&loc=Local
maxIdle: 3000 #最大的空闲连接数 maxIdle: 100 #最大的空闲连接数
maxOpen: 3000 #最大连接数0表示不受限制 maxOpen: 1000 #最大连接数0表示不受限制
maxLifetime: 60s #连接复用的最大生命周期 maxLifetime: 300s #连接复用的最大生命周期
isDebug: false isDebug: false
redis: #没有则注释此属性 redis: #没有则注释此属性
addr: 47.97.27.195:6379 addr: 47.97.27.195:6379
password: lansexiongdi@666 password: lansexiongdi@666
readTimeout: 5s readTimeout: 5s
writeTimeout: 5s writeTimeout: 5s
poolSize: 1000 #连接池大小不配置或配置为0表示不启用连接池 poolSize: 100 #连接池大小不配置或配置为0表示不启用连接池
minIdleConns: 100 #最小空闲连接数 minIdleConns: 50 #最小空闲连接数
connMaxIdleTime: 30s #每个连接最大空闲时间,如果超过了这个时间会被关闭 connMaxIdleTime: 60s #每个连接最大空闲时间,如果超过了这个时间会被关闭
db: 3 db: 3
rocketMQ: rocketMQ:

View File

@ -28,8 +28,12 @@ func db(data *conf.Data_Database) (*gorm.DB, func()) {
mysqlConn, err := sql.Open(data.Driver, data.Source) mysqlConn, err := sql.Open(data.Driver, data.Source)
gormDB, err := gorm.Open( gormDB, err := gorm.Open(
mysql.New(mysql.Config{Conn: mysqlConn}), mysql.New(mysql.Config{
&gorm.Config{Logger: logger.Default.LogMode(logger.Info)}, Conn: mysqlConn,
}),
&gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
},
) )
if err != nil { if err != nil {

View File

@ -0,0 +1,53 @@
package data
import (
"errors"
"fmt"
"google.golang.org/protobuf/types/known/durationpb"
"gorm.io/gorm"
"sync"
"testing"
"time"
"voucher/internal/conf"
"voucher/internal/data/model"
)
func Test_db(t *testing.T) {
maxLifetime := durationpb.New(300) // 5分钟
data := &conf.Data_Database{
Driver: "mysql",
Source: "root:lansexiongdi6,@tcp(47.97.27.195:3306)/voucher?parseTime=True&loc=Local",
MaxIdle: 50, // 空闲连接池
MaxOpen: 100, // 最大连接数
MaxLifetime: maxLifetime,
IsDebug: false,
}
gormDb, cleanup := db(data)
defer cleanup()
start2 := time.Now()
errCount := 0
var wg sync.WaitGroup
const concurrency = 50 // 调整并发数
wg.Add(concurrency)
for i := 0; i < concurrency; i++ {
go func() {
defer wg.Done()
var order model.Order
tx := gormDb.First(&order)
if tx.Error != nil {
if errors.Is(tx.Error, gorm.ErrRecordNotFound) {
t.Errorf("未找到记录")
} else {
fmt.Printf("请求错误: %v\n", tx.Error)
errCount += 1
}
}
}()
}
wg.Wait()
fmt.Printf("\n--------------连接请求,总请求耗时: %v,失败次数: %d--------------\n", time.Since(start2), errCount)
}

View File

@ -75,7 +75,7 @@ func (p *OrderRepoImpl) Create(ctx context.Context, req *bo.OrderBo) (*bo.OrderB
tx := p.db.DB(ctx).Create(info) tx := p.db.DB(ctx).Create(info)
if tx.Error != nil { if tx.Error != nil {
return nil, fmt.Errorf("db fail %w", tx.Error) return nil, fmt.Errorf("create db fail %w", tx.Error)
} }
return p.ToBo(info), nil return p.ToBo(info), nil
@ -181,7 +181,7 @@ func (p *OrderRepoImpl) Success(ctx context.Context, id uint64, voucherNo string
}) })
if tx.Error != nil { if tx.Error != nil {
return fmt.Errorf("db fail %w", tx.Error) return fmt.Errorf("update db fail %w", tx.Error)
} }
return nil return nil
@ -202,7 +202,7 @@ func (p *OrderRepoImpl) Available(ctx context.Context, id uint64) error {
}) })
if tx.Error != nil { if tx.Error != nil {
return fmt.Errorf("db fail %w", tx.Error) return fmt.Errorf("update db fail %w", tx.Error)
} }
return nil return nil
@ -229,7 +229,7 @@ func (p *OrderRepoImpl) Fail(ctx context.Context, id uint64, remark string) erro
}) })
if tx.Error != nil { if tx.Error != nil {
return fmt.Errorf("db fail %w", tx.Error) return fmt.Errorf("update db fail %w", tx.Error)
} }
return nil return nil
@ -249,7 +249,7 @@ func (p *OrderRepoImpl) Used(ctx context.Context, id uint64) error {
}) })
if tx.Error != nil { if tx.Error != nil {
return fmt.Errorf("db fail %w", tx.Error) return fmt.Errorf("update db fail %w", tx.Error)
} }
return nil return nil
@ -268,7 +268,7 @@ func (p *OrderRepoImpl) Expired(ctx context.Context, id uint64) error {
}) })
if tx.Error != nil { if tx.Error != nil {
return fmt.Errorf("db fail %w", tx.Error) return fmt.Errorf("update db fail %w", tx.Error)
} }
return nil return nil