添加dbm的缓存及清理机制
This commit is contained in:
parent
5e184badca
commit
defbafd9d6
|
|
@ -7,11 +7,15 @@ import (
|
|||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
"log"
|
||||
"sync"
|
||||
"videoplayer/proto"
|
||||
)
|
||||
|
||||
var DB *gorm.DB
|
||||
|
||||
var DBMMap map[uint]*proto.DBValue
|
||||
var DBMMapRWMutex = &sync.RWMutex{} //dbm日志
|
||||
|
||||
func Init() error {
|
||||
var db *gorm.DB
|
||||
var err error
|
||||
|
|
|
|||
1
main.go
1
main.go
|
|
@ -232,6 +232,7 @@ func myTask() {
|
|||
RunGeneralCron()
|
||||
service.ShellWillRunFromServer()
|
||||
service.SyncTokenSecretFromUserCenter()
|
||||
service.DelDBMMap() //定时处理DBMMap中的数据
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,13 +27,13 @@ var SigningKeyIsValid = true // 是否有效的签名密钥
|
|||
const (
|
||||
MYSQL_USER = "video_t2"
|
||||
MYSQL_DB = "video_t2"
|
||||
MYSQL_PASSWORD = "2t2SKHmWEYj2xFKF"
|
||||
MYSQL_PASSWORD = "2fdreYj2xFKF"
|
||||
MYSQL_PORT = "3306"
|
||||
MYSQL_HOST = "127.0.0.1"
|
||||
MYSQL_DSN = MYSQL_USER + ":" + MYSQL_PASSWORD + "@tcp(" + MYSQL_HOST + ":" + MYSQL_PORT + ")/" + MYSQL_DB + "?charset=utf8mb4&parseTime=True&loc=Local"
|
||||
|
||||
REDIS_ADDR = "127.0.0.1:6379"
|
||||
REDIS_PASSWORD = "lj502138"
|
||||
REDIS_PASSWORD = "lgybvueiogvter"
|
||||
REIDS_DB = 2
|
||||
|
||||
TOKEN_SECRET = "mfjurnc_32ndj9dfhj"
|
||||
|
|
@ -43,6 +43,8 @@ const (
|
|||
|
||||
// 以下是文件上传的配置
|
||||
FILE_BASE_DIR = "/home/lijun/file/"
|
||||
|
||||
DBMMap_Max_Keep_Time = 10 * 60 //DBMap中的数据最大保持时间,10min
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
|||
|
|
@ -111,3 +111,8 @@ type DBTableAttribute struct {
|
|||
ColumnName string `json:"column_name"` // 列名
|
||||
ColumnType string `json:"column_type"` // 列类型
|
||||
}
|
||||
|
||||
type DBValue struct {
|
||||
LastUserTime int64 `json:"last_user_time"`
|
||||
Value *gorm.DB `json:"value"`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import (
|
|||
"strconv"
|
||||
"videoplayer/dao"
|
||||
"videoplayer/proto"
|
||||
"videoplayer/worker"
|
||||
)
|
||||
|
||||
func RunSQL(req *proto.RunSQLRequest) (*proto.SQLResult, error) {
|
||||
|
|
@ -37,6 +38,16 @@ func RunSQL(req *proto.RunSQLRequest) (*proto.SQLResult, error) {
|
|||
}
|
||||
|
||||
func GetGORMDBObject(dbmInfo *proto.DBManage) (db_ *gorm.DB, err error) {
|
||||
dao.DBMMapRWMutex.RLock()
|
||||
defer dao.DBMMapRWMutex.RUnlock()
|
||||
if dao.DBMMap != nil {
|
||||
dbValue := dao.DBMMap[dbmInfo.ID]
|
||||
if dbValue != nil {
|
||||
dbValue.LastUserTime = worker.GetCurrentTimestamp()
|
||||
return dbValue.Value, nil
|
||||
}
|
||||
}
|
||||
|
||||
switch dbmInfo.DB_Type {
|
||||
case proto.DB_TYPE_MYSQL: // MySQL
|
||||
dsn := dbmInfo.DB_User + ":" + dbmInfo.DB_Password + "@tcp(" + dbmInfo.DB_IP + ":" + strconv.Itoa(int(dbmInfo.DB_Port)) + ")/" + dbmInfo.DB_NAME + "?charset=utf8mb4&parseTime=True&loc=Local"
|
||||
|
|
@ -53,6 +64,13 @@ func GetGORMDBObject(dbmInfo *proto.DBManage) (db_ *gorm.DB, err error) {
|
|||
default:
|
||||
err = errors.New("unsupported database type")
|
||||
}
|
||||
|
||||
dao.DBMMapRWMutex.Lock()
|
||||
defer dao.DBMMapRWMutex.Unlock()
|
||||
var dbValue *proto.DBValue
|
||||
dbValue.Value = db_
|
||||
dbValue.LastUserTime = worker.GetCurrentTimestamp()
|
||||
dao.DBMMap[dbmInfo.ID] = dbValue
|
||||
return db_, err
|
||||
}
|
||||
|
||||
|
|
@ -218,3 +236,14 @@ func GetDBTableDesc(req *proto.GetDBTableDescReq, userId int) (*proto.SQLResult,
|
|||
//}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func DelDBMMap() {
|
||||
dao.DBMMapRWMutex.Lock()
|
||||
defer dao.DBMMapRWMutex.Unlock()
|
||||
cur := worker.GetCurrentTimestamp()
|
||||
for k, v := range dao.DBMMap {
|
||||
if cur-v.LastUserTime < proto.DBMMap_Max_Keep_Time {
|
||||
delete(dao.DBMMap, k) //删除
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue