Initial commit: TaskPool React panel
- React frontend with route-level code splitting - Backend rebranded from Baihu to TaskPool - DB brand migration script and local compatibility
This commit is contained in:
Vendored
+94
@@ -0,0 +1,94 @@
|
||||
package cache
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/engigu/taskpool/internal/constant"
|
||||
"github.com/engigu/taskpool/internal/database"
|
||||
"github.com/engigu/taskpool/internal/models"
|
||||
)
|
||||
|
||||
// siteCache 站点设置内存缓存
|
||||
var (
|
||||
siteCache = make(map[string]string)
|
||||
siteCacheMu sync.RWMutex
|
||||
siteCacheInit bool
|
||||
)
|
||||
|
||||
// LoadSiteCache 从数据库加载站点设置到缓存
|
||||
func LoadSiteCache() {
|
||||
siteCacheMu.Lock()
|
||||
defer siteCacheMu.Unlock()
|
||||
|
||||
// 先填充默认值
|
||||
if defaults, ok := constant.DefaultSettings[constant.SectionSite]; ok {
|
||||
for k, v := range defaults {
|
||||
siteCache[k] = v
|
||||
}
|
||||
}
|
||||
|
||||
// 从数据库加载覆盖
|
||||
var settings []models.Setting
|
||||
database.DB.Where("section = ?", constant.SectionSite).Find(&settings)
|
||||
for _, setting := range settings {
|
||||
siteCache[setting.Key] = string(setting.Value)
|
||||
}
|
||||
siteCacheInit = true
|
||||
}
|
||||
|
||||
// ensureSiteCache 确保站点缓存已初始化
|
||||
func ensureSiteCache() {
|
||||
siteCacheMu.RLock()
|
||||
init := siteCacheInit
|
||||
siteCacheMu.RUnlock()
|
||||
|
||||
if !init {
|
||||
LoadSiteCache()
|
||||
}
|
||||
}
|
||||
|
||||
// GetSiteCache 从缓存获取站点设置
|
||||
func GetSiteCache(key string) string {
|
||||
ensureSiteCache()
|
||||
|
||||
siteCacheMu.RLock()
|
||||
defer siteCacheMu.RUnlock()
|
||||
|
||||
if val, ok := siteCache[key]; ok {
|
||||
return val
|
||||
}
|
||||
if def, ok := constant.DefaultSettings[constant.SectionSite][key]; ok {
|
||||
return def
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// SetSiteCache 更新缓存中的站点设置
|
||||
func SetSiteCache(key, value string) {
|
||||
siteCacheMu.Lock()
|
||||
siteCache[key] = value
|
||||
siteCacheMu.Unlock()
|
||||
}
|
||||
|
||||
// GetSiteCacheAll 获取整个站点设置缓存
|
||||
func GetSiteCacheAll() map[string]string {
|
||||
ensureSiteCache()
|
||||
|
||||
siteCacheMu.RLock()
|
||||
defer siteCacheMu.RUnlock()
|
||||
|
||||
result := make(map[string]string)
|
||||
for k, v := range siteCache {
|
||||
result[k] = v
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// SetSiteCacheBatch 批量更新缓存
|
||||
func SetSiteCacheBatch(values map[string]string) {
|
||||
siteCacheMu.Lock()
|
||||
for k, v := range values {
|
||||
siteCache[k] = v
|
||||
}
|
||||
siteCacheMu.Unlock()
|
||||
}
|
||||
Reference in New Issue
Block a user