Skip to content

Commit 024b05a

Browse files
committed
feat: Enhance setting cache management with dynamic TTL
- Introduced a function to determine cache TTL based on setting keys, allowing critical settings to have shorter cache durations. - Updated cache logic in Create, Update, Get, and GetValueByKey methods to utilize the new TTL management, improving performance and consistency in settings retrieval.
1 parent 99311f3 commit 024b05a

1 file changed

Lines changed: 18 additions & 9 deletions

File tree

core/app/repo/setting.go

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ import (
1414
type SettingRepo struct{}
1515

1616
var (
17-
settingCache = cache.New(5*time.Minute, 10*time.Minute)
18-
settingCacheTTL = 5 * time.Minute
17+
settingCache = cache.New(5*time.Minute, 10*time.Minute)
18+
settingDefaultTTL = 5 * time.Minute
19+
settingCriticalTTL = 5 * time.Second
1920
)
2021

2122
type ISettingRepo interface {
@@ -32,6 +33,14 @@ func NewISettingRepo() ISettingRepo {
3233
return &SettingRepo{}
3334
}
3435

36+
func loadSettingTTL(key string) time.Duration {
37+
switch key {
38+
case "AllowIPs", "BindDomain", "SSL":
39+
return settingCriticalTTL
40+
}
41+
return settingDefaultTTL
42+
}
43+
3544
func (u *SettingRepo) List(opts ...global.DBOption) ([]model.Setting, error) {
3645
var settings []model.Setting
3746
db := global.DB.Model(&model.Setting{})
@@ -50,7 +59,7 @@ func (u *SettingRepo) Create(key, value string) error {
5059
if err := global.DB.Create(setting).Error; err != nil {
5160
return err
5261
}
53-
settingCache.Set(key, value, settingCacheTTL)
62+
settingCache.Set(key, value, loadSettingTTL(key))
5463
return nil
5564
}
5665

@@ -63,7 +72,7 @@ func (u *SettingRepo) Get(opts ...global.DBOption) (model.Setting, error) {
6372

6473
err := db.First(&settings).Error
6574
if err == nil && settings.Key != "" {
66-
settingCache.Set(settings.Key, settings.Value, settingCacheTTL)
75+
settingCache.Set(settings.Key, settings.Value, loadSettingTTL(settings.Key))
6776
}
6877
return settings, err
6978
}
@@ -77,15 +86,15 @@ func (u *SettingRepo) GetValueByKey(key string) (string, error) {
7786
if err := global.DB.Model(&model.Setting{}).Where("key = ?", key).First(&setting).Error; err != nil {
7887
return "", err
7988
}
80-
settingCache.Set(key, setting.Value, settingCacheTTL)
89+
settingCache.Set(key, setting.Value, loadSettingTTL(key))
8190
return setting.Value, nil
8291
}
8392

8493
func (u *SettingRepo) Update(key, value string) error {
8594
if err := global.DB.Model(&model.Setting{}).Where("key = ?", key).Updates(map[string]interface{}{"value": value}).Error; err != nil {
8695
return err
8796
}
88-
settingCache.Set(key, value, settingCacheTTL)
97+
settingCache.Set(key, value, loadSettingTTL(key))
8998
return nil
9099
}
91100

@@ -97,15 +106,15 @@ func (u *SettingRepo) UpdateOrCreate(key, value string) error {
97106
if err := global.DB.Create(&model.Setting{Key: key, Value: value}).Error; err != nil {
98107
return err
99108
}
100-
settingCache.Set(key, value, settingCacheTTL)
109+
settingCache.Set(key, value, loadSettingTTL(key))
101110
return nil
102111
}
103112
return result.Error
104113
}
105114
if err := global.DB.Model(&setting).UpdateColumn("value", value).Error; err != nil {
106115
return err
107116
}
108-
settingCache.Set(key, value, settingCacheTTL)
117+
settingCache.Set(key, value, loadSettingTTL(key))
109118
return nil
110119
}
111120

@@ -116,6 +125,6 @@ func (u *SettingRepo) DefaultMenu() error {
116125
Update("value", menus).Error; err != nil {
117126
return err
118127
}
119-
settingCache.Set("HideMenu", menus, settingCacheTTL)
128+
settingCache.Set("HideMenu", menus, settingDefaultTTL)
120129
return nil
121130
}

0 commit comments

Comments
 (0)