90 lines
2.4 KiB
Go
90 lines
2.4 KiB
Go
package mysql
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"schisandra-album-cloud-microservices/app/auth/model/mysql/model"
|
|
"schisandra-album-cloud-microservices/app/auth/model/mysql/query"
|
|
"time"
|
|
|
|
"github.com/asjdf/gorm-cache/cache"
|
|
"github.com/asjdf/gorm-cache/config"
|
|
"github.com/asjdf/gorm-cache/storage"
|
|
"github.com/redis/go-redis/v9"
|
|
"gorm.io/driver/mysql"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/logger"
|
|
)
|
|
|
|
func NewMySQL(url string, maxOpenConn int, maxIdleConn int, client *redis.Client) (*gorm.DB, *query.Query) {
|
|
db, err := gorm.Open(mysql.Open(url), &gorm.Config{
|
|
SkipDefaultTransaction: true,
|
|
PrepareStmt: true,
|
|
Logger: logger.New(
|
|
log.New(os.Stdout, "\r\n", log.LstdFlags),
|
|
logger.Config{
|
|
SlowThreshold: time.Second, // 慢sql日志
|
|
LogLevel: logger.Warn, // 级别
|
|
Colorful: true, // 颜色
|
|
IgnoreRecordNotFoundError: true, // 忽略RecordNotFoundError
|
|
ParameterizedQueries: true, // 格式化SQL语句
|
|
}),
|
|
})
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
sqlDB, err := db.DB()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
sqlDB.SetMaxOpenConns(maxOpenConn)
|
|
sqlDB.SetMaxIdleConns(maxIdleConn)
|
|
useDB := query.Use(db)
|
|
// migrate
|
|
//Migrate(db)
|
|
// cache
|
|
gormCache, err := cache.NewGorm2Cache(&config.CacheConfig{
|
|
CacheLevel: config.CacheLevelAll,
|
|
CacheStorage: storage.NewRedis(&storage.RedisStoreConfig{
|
|
KeyPrefix: "cache",
|
|
Client: client,
|
|
}),
|
|
InvalidateWhenUpdate: true, // when you create/update/delete objects, invalidate cache
|
|
CacheTTL: 10000, // 5000 ms
|
|
CacheMaxItemCnt: 0, // if length of objects retrieved one single time
|
|
AsyncWrite: true, // async write to cache
|
|
DebugMode: false,
|
|
DisableCachePenetrationProtect: true, // disable cache penetration protect
|
|
})
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
err = db.Use(gormCache)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return db, useDB
|
|
}
|
|
|
|
func Migrate(db *gorm.DB) {
|
|
err := db.AutoMigrate(
|
|
&model.ScaAuthUser{},
|
|
&model.ScaAuthRole{},
|
|
&model.ScaAuthPermissionRule{},
|
|
&model.ScaAuthMenu{},
|
|
&model.ScaAuthUserDevice{},
|
|
&model.ScaAuthUserSocial{},
|
|
&model.ScaCommentLike{},
|
|
&model.ScaCommentReply{},
|
|
&model.ScaStorageInfo{},
|
|
&model.ScaMessageReport{},
|
|
&model.ScaStorageConfig{},
|
|
&model.ScaUserFollow{},
|
|
&model.ScaUserLevel{},
|
|
&model.ScaUserMessage{})
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|