package main
import (
"fmt"
"sync"
"time"
"github.com/gin-gonic/gin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type User struct {
ID int `json:"id"`
Username string `json:"username"`
}
func (User) TableName() string {
return "sqt8"
}
var global_db *gorm.DB
func main() {
r := gin.Default()
var err error
global_db, err = getdb()
sqlDB, _ := global_db.DB()
global_db.Set("gorm:table_options", "ENGINE=MyISAM").AutoMigrate(&User{})
// 5秒内连接没有活跃的话则自动关闭连接
sqlDB.SetConnMaxLifetime(time.Second * 5)
count := 800 // 最大支持并发
sum := 100000000 // 任务总数
wg := sync.WaitGroup{} //控制主协程等待所有子协程执行完之后再退出。
c := make(chan struct{}, count) // 控制任务并发的chan
defer close(c)
for i := 0; i < sum; i++ {
wg.Add(1)
c <- struct{}{} // 作用类似于waitgroup.Add(1)
go func(j int) {
defer wg.Done()
usera := User{Username: "Jinzhu"}
global_db.Create(&usera)
fmt.Println(j)
<-c // 执行完毕,释放资源
}(i)
}
wg.Wait()
//for i := 0; i <= 1000000; i++ {
// go gorun()
// fmt.Println(i)
//}
r.GET("/ping", func(c *gin.Context) {
if err != nil {
c.JSON(200, gin.H{
"status": 1,
"msg": err.Error(),
})
}
var user User
global_db.Raw("SELECT id, username FROM users WHERE id = ?", 1).Scan(&user)
c.JSON(200, gin.H{
"status": 0,
"username": user.Username,
"msg": "查询成功",
})
})
r.Run()
}
func gorun() {
usera := User{Username: "Jinzhu"}
global_db.Create(&usera)
}
func getdb() (*gorm.DB, error) {
dsn := "root:123456@tcp(127.0.0.1:3306)/demo?charset=utf8mb4&parseTime=True&loc=Local"
return gorm.Open(mysql.Open(dsn), &gorm.Config{})
}
gorm 设置数据库引擎 控制并发线程数量
于 2023-04-03 09:12:05 首次发布