mirror of
https://github.com/acepanel/panel.git
synced 2026-02-04 07:57:21 +08:00
feat: 为设置添加一个缓存层
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user