diff --git a/configs/config.yaml b/configs/config.yaml index 5905e21..facb9ff 100644 --- a/configs/config.yaml +++ b/configs/config.yaml @@ -10,17 +10,17 @@ data: driver: mysql source: root:lansexiongdi6,@tcp(47.97.27.195:3306)/voucher?parseTime=True&loc=Local maxIdle: 100 #最大的空闲连接数 - maxOpen: 2000 #最大连接数,0表示不受限制 - maxLifetime: 30s #连接复用的最大生命周期 + maxOpen: 1000 #最大连接数,0表示不受限制 + maxLifetime: 300s #连接复用的最大生命周期 isDebug: false redis: #没有则注释此属性 addr: 47.97.27.195:6379 password: lansexiongdi@666 readTimeout: 5s writeTimeout: 5s - poolSize: 30 #连接池大小,不配置,或配置为0表示不启用连接池 - minIdleConns: 10 #最小空闲连接数 - connMaxIdleTime: 30s #每个连接最大空闲时间,如果超过了这个时间会被关闭 + poolSize: 100 #连接池大小,不配置,或配置为0表示不启用连接池 + minIdleConns: 50 #最小空闲连接数 + connMaxIdleTime: 60s #每个连接最大空闲时间,如果超过了这个时间会被关闭 db: 3 rocketMQ: diff --git a/configs/config_test.yaml b/configs/config_test.yaml index 17810c2..facb9ff 100644 --- a/configs/config_test.yaml +++ b/configs/config_test.yaml @@ -9,18 +9,18 @@ data: db: driver: mysql source: root:lansexiongdi6,@tcp(47.97.27.195:3306)/voucher?parseTime=True&loc=Local - maxIdle: 3000 #最大的空闲连接数 - maxOpen: 3000 #最大连接数,0表示不受限制 - maxLifetime: 60s #连接复用的最大生命周期 + maxIdle: 100 #最大的空闲连接数 + maxOpen: 1000 #最大连接数,0表示不受限制 + maxLifetime: 300s #连接复用的最大生命周期 isDebug: false redis: #没有则注释此属性 addr: 47.97.27.195:6379 password: lansexiongdi@666 readTimeout: 5s writeTimeout: 5s - poolSize: 1000 #连接池大小,不配置,或配置为0表示不启用连接池 - minIdleConns: 100 #最小空闲连接数 - connMaxIdleTime: 30s #每个连接最大空闲时间,如果超过了这个时间会被关闭 + poolSize: 100 #连接池大小,不配置,或配置为0表示不启用连接池 + minIdleConns: 50 #最小空闲连接数 + connMaxIdleTime: 60s #每个连接最大空闲时间,如果超过了这个时间会被关闭 db: 3 rocketMQ: diff --git a/internal/data/gorm.go b/internal/data/gorm.go index f5d9ec3..f7db657 100644 --- a/internal/data/gorm.go +++ b/internal/data/gorm.go @@ -28,8 +28,12 @@ func db(data *conf.Data_Database) (*gorm.DB, func()) { mysqlConn, err := sql.Open(data.Driver, data.Source) gormDB, err := gorm.Open( - mysql.New(mysql.Config{Conn: mysqlConn}), - &gorm.Config{Logger: logger.Default.LogMode(logger.Info)}, + mysql.New(mysql.Config{ + Conn: mysqlConn, + }), + &gorm.Config{ + Logger: logger.Default.LogMode(logger.Info), + }, ) if err != nil { diff --git a/internal/data/gorm_test.go b/internal/data/gorm_test.go new file mode 100644 index 0000000..ab347d6 --- /dev/null +++ b/internal/data/gorm_test.go @@ -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) +} diff --git a/internal/data/repoimpl/order.go b/internal/data/repoimpl/order.go index 094296a..500980f 100644 --- a/internal/data/repoimpl/order.go +++ b/internal/data/repoimpl/order.go @@ -75,7 +75,7 @@ func (p *OrderRepoImpl) Create(ctx context.Context, req *bo.OrderBo) (*bo.OrderB tx := p.db.DB(ctx).Create(info) 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 @@ -181,7 +181,7 @@ func (p *OrderRepoImpl) Success(ctx context.Context, id uint64, voucherNo string }) if tx.Error != nil { - return fmt.Errorf("db fail %w", tx.Error) + return fmt.Errorf("update db fail %w", tx.Error) } return nil @@ -202,7 +202,7 @@ func (p *OrderRepoImpl) Available(ctx context.Context, id uint64) error { }) if tx.Error != nil { - return fmt.Errorf("db fail %w", tx.Error) + return fmt.Errorf("update db fail %w", tx.Error) } return nil @@ -229,7 +229,7 @@ func (p *OrderRepoImpl) Fail(ctx context.Context, id uint64, remark string) erro }) if tx.Error != nil { - return fmt.Errorf("db fail %w", tx.Error) + return fmt.Errorf("update db fail %w", tx.Error) } return nil @@ -249,7 +249,7 @@ func (p *OrderRepoImpl) Used(ctx context.Context, id uint64) error { }) if tx.Error != nil { - return fmt.Errorf("db fail %w", tx.Error) + return fmt.Errorf("update db fail %w", tx.Error) } return nil @@ -268,7 +268,7 @@ func (p *OrderRepoImpl) Expired(ctx context.Context, id uint64) error { }) if tx.Error != nil { - return fmt.Errorf("db fail %w", tx.Error) + return fmt.Errorf("update db fail %w", tx.Error) } return nil