60 lines
1.0 KiB
Go
60 lines
1.0 KiB
Go
package cache
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"sync"
|
|
"time"
|
|
|
|
_ "modernc.org/sqlite"
|
|
)
|
|
|
|
var (
|
|
GlobalDB *sql.DB
|
|
once sync.Once
|
|
)
|
|
|
|
func InitCache() {
|
|
once.Do(func() {
|
|
dbPath := "./database/local/user.db"
|
|
|
|
if err := os.MkdirAll(filepath.Dir(dbPath), 0755); err != nil {
|
|
panic(fmt.Sprintf("创建数据库目录失败:%v", err))
|
|
}
|
|
|
|
db, err := sql.Open("sqlite", dbPath)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("打开 SQLite 数据库失败:%v", err))
|
|
}
|
|
|
|
if err := db.Ping(); err != nil {
|
|
_ = db.Close()
|
|
panic(fmt.Sprintf("验证 SQLite 连接失败:%v", err))
|
|
}
|
|
|
|
db.SetMaxOpenConns(1)
|
|
db.SetMaxIdleConns(1)
|
|
db.SetConnMaxLifetime(0)
|
|
db.SetConnMaxIdleTime(30 * time.Minute)
|
|
|
|
GlobalDB = db
|
|
fmt.Printf("SQLite 数据库初始化成功,文件路径:%s\n", dbPath)
|
|
})
|
|
}
|
|
|
|
func GetCacheDB() *sql.DB {
|
|
if GlobalDB == nil {
|
|
panic("数据库未初始化,请先调用 cache.InitCache()")
|
|
}
|
|
return GlobalDB
|
|
}
|
|
|
|
func CloseCache() error {
|
|
if GlobalDB != nil {
|
|
return GlobalDB.Close()
|
|
}
|
|
return nil
|
|
}
|