refactor: replace redis runtime and queues with sqlite-backed scheduler
This commit is contained in:
@@ -9,7 +9,7 @@ func Init() {
|
||||
log.Fatalf("DBInit err: %v", err)
|
||||
}
|
||||
|
||||
if err := RedisInit(); err != nil {
|
||||
log.Fatalf("RedisInit err: %v", err)
|
||||
if err := RuntimeInit(); err != nil {
|
||||
log.Fatalf("RuntimeInit err: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/assimon/luuu/util/log"
|
||||
"github.com/go-redis/redis/v8"
|
||||
"github.com/gookit/color"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
var Rdb *redis.Client
|
||||
|
||||
func RedisInit() error {
|
||||
options := redis.Options{
|
||||
Addr: fmt.Sprintf(
|
||||
"%s:%s",
|
||||
viper.GetString("redis_host"),
|
||||
viper.GetString("redis_port")), // Redis地址
|
||||
DB: viper.GetInt("redis_db"), // Redis库
|
||||
PoolSize: viper.GetInt("redis_pool_size"), // Redis连接池大小
|
||||
MaxRetries: viper.GetInt("redis_max_retries"), // 最大重试次数
|
||||
IdleTimeout: time.Second * time.Duration(viper.GetInt("redis_idle_timeout")), // 空闲链接超时时间
|
||||
}
|
||||
if viper.GetString("redis_passwd") != "" {
|
||||
options.Password = viper.GetString("redis_passwd")
|
||||
}
|
||||
Rdb = redis.NewClient(&options)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
defer cancel()
|
||||
pong, err := Rdb.Ping(ctx).Result()
|
||||
if err == redis.Nil {
|
||||
log.Sugar.Debug("[store_redis] Nil reply returned by Rdb when key does not exist.")
|
||||
} else if err != nil {
|
||||
color.Red.Printf("[store_redis] redis connRdb err,err=%s", err)
|
||||
// panic(err)
|
||||
// time.Sleep(10 * time.Second)
|
||||
// RedisInit()
|
||||
return err
|
||||
} else {
|
||||
log.Sugar.Debug("[store_redis] redis connRdb success,suc=%s", pong)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"github.com/assimon/luuu/config"
|
||||
"github.com/assimon/luuu/model/mdb"
|
||||
"github.com/assimon/luuu/util/log"
|
||||
"github.com/gookit/color"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/logger"
|
||||
"gorm.io/gorm/schema"
|
||||
)
|
||||
|
||||
var RuntimeDB *gorm.DB
|
||||
|
||||
func RuntimeInit() error {
|
||||
var err error
|
||||
runtimePath := config.GetRuntimeSqlitePath()
|
||||
color.Green.Printf("[runtime_db] sqlite filename: %s\n", runtimePath)
|
||||
RuntimeDB, err = openDB(runtimePath, &gorm.Config{
|
||||
NamingStrategy: schema.NamingStrategy{
|
||||
SingularTable: true,
|
||||
},
|
||||
Logger: logger.Default.LogMode(logger.Error),
|
||||
})
|
||||
if err != nil {
|
||||
color.Red.Printf("[runtime_db] sqlite open DB,err=%s\n", err)
|
||||
return err
|
||||
}
|
||||
|
||||
sqlDB, err := RuntimeDB.DB()
|
||||
if err != nil {
|
||||
color.Red.Printf("[runtime_db] sqlite get DB,err=%s\n", err)
|
||||
return err
|
||||
}
|
||||
|
||||
concurrency := config.GetQueueConcurrency()
|
||||
if concurrency < 2 {
|
||||
concurrency = 2
|
||||
}
|
||||
if concurrency > 16 {
|
||||
concurrency = 16
|
||||
}
|
||||
sqlDB.SetMaxOpenConns(concurrency)
|
||||
sqlDB.SetMaxIdleConns(1)
|
||||
|
||||
if err = RuntimeDB.Exec("PRAGMA journal_mode=WAL;").Error; err != nil {
|
||||
return err
|
||||
}
|
||||
if err = RuntimeDB.Exec("PRAGMA synchronous=NORMAL;").Error; err != nil {
|
||||
return err
|
||||
}
|
||||
if err = RuntimeDB.Exec("PRAGMA busy_timeout=5000;").Error; err != nil {
|
||||
return err
|
||||
}
|
||||
if err = sqlDB.Ping(); err != nil {
|
||||
color.Red.Printf("[runtime_db] sqlite connDB err:%s", err.Error())
|
||||
return err
|
||||
}
|
||||
if err = RuntimeDB.AutoMigrate(&mdb.TransactionLock{}); err != nil {
|
||||
color.Red.Printf("[runtime_db] sqlite migrate DB(TransactionLock),err=%s\n", err)
|
||||
return err
|
||||
}
|
||||
|
||||
log.Sugar.Debug("[runtime_db] sqlite connDB success")
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user