feat: add site config cached
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
package settings_service
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
// SiteConfigCache 站点配置缓存
|
||||
type SiteConfigCache struct {
|
||||
data map[string]string
|
||||
lastUpdate time.Time
|
||||
mutex sync.RWMutex
|
||||
}
|
||||
|
||||
var siteConfigCache = &SiteConfigCache{
|
||||
data: make(map[string]string),
|
||||
}
|
||||
|
||||
// GetSiteConfigCache 获取站点配置缓存
|
||||
func GetSiteConfigCache() map[string]string {
|
||||
siteConfigCache.mutex.RLock()
|
||||
defer siteConfigCache.mutex.RUnlock()
|
||||
|
||||
// 返回缓存的副本,避免外部修改
|
||||
result := make(map[string]string)
|
||||
for k, v := range siteConfigCache.data {
|
||||
result[k] = v
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// SetSiteConfigCache 设置站点配置缓存
|
||||
func SetSiteConfigCache(data map[string]string) {
|
||||
siteConfigCache.mutex.Lock()
|
||||
defer siteConfigCache.mutex.Unlock()
|
||||
|
||||
// 清空现有缓存
|
||||
siteConfigCache.data = make(map[string]string)
|
||||
|
||||
// 设置新数据
|
||||
for k, v := range data {
|
||||
siteConfigCache.data[k] = v
|
||||
}
|
||||
|
||||
// 更新缓存时间
|
||||
siteConfigCache.lastUpdate = time.Now()
|
||||
}
|
||||
|
||||
// ClearSiteConfigCache 清除站点配置缓存
|
||||
func ClearSiteConfigCache() {
|
||||
siteConfigCache.mutex.Lock()
|
||||
defer siteConfigCache.mutex.Unlock()
|
||||
|
||||
siteConfigCache.data = make(map[string]string)
|
||||
siteConfigCache.lastUpdate = time.Time{}
|
||||
}
|
||||
|
||||
// IsSiteConfigCacheValid 检查缓存是否有效(可选:可以设置缓存过期时间)
|
||||
func IsSiteConfigCacheValid() bool {
|
||||
siteConfigCache.mutex.RLock()
|
||||
defer siteConfigCache.mutex.RUnlock()
|
||||
|
||||
// 如果缓存为空,认为无效
|
||||
if len(siteConfigCache.data) == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
// 可以在这里添加缓存过期逻辑,比如缓存5分钟后过期
|
||||
// if time.Since(siteConfigCache.lastUpdate) > 5*time.Minute {
|
||||
// return false
|
||||
// }
|
||||
|
||||
return true
|
||||
}
|
||||
Reference in New Issue
Block a user