2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 07:57:21 +08:00

feat: 为设置添加一个缓存层

This commit is contained in:
2025-05-13 21:46:44 +08:00
parent 8410b48ac0
commit b767044199

View File

@@ -5,6 +5,7 @@ import (
"encoding/json"
"errors"
"path/filepath"
"sync"
"github.com/go-rat/utils/hash"
"github.com/go-rat/utils/str"
@@ -27,10 +28,11 @@ import (
)
type settingRepo struct {
t *gotext.Locale
db *gorm.DB
conf *koanf.Koanf
task biz.TaskRepo
t *gotext.Locale
cache sync.Map
db *gorm.DB
conf *koanf.Koanf
task biz.TaskRepo
}
func NewSettingRepo(t *gotext.Locale, db *gorm.DB, conf *koanf.Koanf, task biz.TaskRepo) biz.SettingRepo {
@@ -43,6 +45,13 @@ func NewSettingRepo(t *gotext.Locale, db *gorm.DB, conf *koanf.Koanf, task biz.T
}
func (r *settingRepo) Get(key biz.SettingKey, defaultValue ...string) (string, error) {
if cache, ok := r.cache.Load(key); ok {
if v, ok := cache.(string); ok {
return v, nil
}
r.cache.Delete(key)
}
setting := new(biz.Setting)
if err := r.db.Where("key = ?", key).First(setting).Error; err != nil {
if !errors.Is(err, gorm.ErrRecordNotFound) {
@@ -58,6 +67,13 @@ func (r *settingRepo) Get(key biz.SettingKey, defaultValue ...string) (string, e
}
func (r *settingRepo) GetBool(key biz.SettingKey, defaultValue ...bool) (bool, error) {
if cache, ok := r.cache.Load(key); ok {
if v, ok := cache.(bool); ok {
return v, nil
}
r.cache.Delete(key)
}
setting := new(biz.Setting)
if err := r.db.Where("key = ?", key).First(setting).Error; err != nil {
if !errors.Is(err, gorm.ErrRecordNotFound) {
@@ -73,6 +89,13 @@ func (r *settingRepo) GetBool(key biz.SettingKey, defaultValue ...bool) (bool, e
}
func (r *settingRepo) GetInt(key biz.SettingKey, defaultValue ...int) (int, error) {
if cache, ok := r.cache.Load(key); ok {
if v, ok := cache.(int); ok {
return v, nil
}
r.cache.Delete(key)
}
setting := new(biz.Setting)
if err := r.db.Where("key = ?", key).First(setting).Error; err != nil {
if !errors.Is(err, gorm.ErrRecordNotFound) {
@@ -88,6 +111,13 @@ func (r *settingRepo) GetInt(key biz.SettingKey, defaultValue ...int) (int, erro
}
func (r *settingRepo) GetSlice(key biz.SettingKey, defaultValue ...[]string) ([]string, error) {
if cache, ok := r.cache.Load(key); ok {
if v, ok := cache.([]string); ok {
return v, nil
}
r.cache.Delete(key)
}
setting := new(biz.Setting)
if err := r.db.Where("key = ?", key).First(setting).Error; err != nil {
if !errors.Is(err, gorm.ErrRecordNotFound) {
@@ -124,7 +154,13 @@ func (r *settingRepo) Set(key biz.SettingKey, value string) error {
setting.Key = key
setting.Value = value
return r.db.Save(setting).Error
if err := r.db.Save(setting).Error; err != nil {
return err
}
r.cache.Store(key, value)
return nil
}
func (r *settingRepo) SetSlice(key biz.SettingKey, value []string) error {
@@ -146,7 +182,13 @@ func (r *settingRepo) SetSlice(key biz.SettingKey, value []string) error {
setting.Value = string(b)
}
return r.db.Save(setting).Error
if err := r.db.Save(setting).Error; err != nil {
return err
}
r.cache.Store(key, value)
return nil
}
func (r *settingRepo) Delete(key biz.SettingKey) error {
@@ -155,6 +197,8 @@ func (r *settingRepo) Delete(key biz.SettingKey) error {
return err
}
r.cache.Delete(key)
return nil
}