Files
tyapi-server/internal/shared/cache/cache_config_manager.go

194 lines
4.9 KiB
Go
Raw Normal View History

2025-07-28 01:46:39 +08:00
package cache
import (
"sync"
)
// CacheConfigManager 缓存配置管理器
// 提供全局缓存配置管理和表级别的缓存决策
type CacheConfigManager struct {
config CacheConfig
mutex sync.RWMutex
}
// GlobalCacheConfigManager 全局缓存配置管理器实例
var GlobalCacheConfigManager *CacheConfigManager
// InitCacheConfigManager 初始化全局缓存配置管理器
func InitCacheConfigManager(config CacheConfig) {
GlobalCacheConfigManager = &CacheConfigManager{
config: config,
}
}
// GetCacheConfig 获取当前缓存配置
func (m *CacheConfigManager) GetCacheConfig() CacheConfig {
m.mutex.RLock()
defer m.mutex.RUnlock()
return m.config
}
// UpdateCacheConfig 更新缓存配置
func (m *CacheConfigManager) UpdateCacheConfig(config CacheConfig) {
m.mutex.Lock()
defer m.mutex.Unlock()
m.config = config
}
// IsTableCacheEnabled 检查表是否启用缓存
func (m *CacheConfigManager) IsTableCacheEnabled(tableName string) bool {
m.mutex.RLock()
defer m.mutex.RUnlock()
// 检查表是否在禁用列表中
for _, disabledTable := range m.config.DisabledTables {
if disabledTable == tableName {
return false
}
}
// 如果配置了启用列表,只对启用列表中的表启用缓存
if len(m.config.EnabledTables) > 0 {
for _, enabledTable := range m.config.EnabledTables {
if enabledTable == tableName {
return true
}
}
return false
}
// 如果没有配置启用列表,默认对所有表启用缓存(除了禁用列表中的表)
return true
}
// IsTableCacheDisabled 检查表是否禁用缓存
func (m *CacheConfigManager) IsTableCacheDisabled(tableName string) bool {
return !m.IsTableCacheEnabled(tableName)
}
// GetEnabledTables 获取启用缓存的表列表
func (m *CacheConfigManager) GetEnabledTables() []string {
m.mutex.RLock()
defer m.mutex.RUnlock()
return m.config.EnabledTables
}
// GetDisabledTables 获取禁用缓存的表列表
func (m *CacheConfigManager) GetDisabledTables() []string {
m.mutex.RLock()
defer m.mutex.RUnlock()
return m.config.DisabledTables
}
// AddEnabledTable 添加启用缓存的表
func (m *CacheConfigManager) AddEnabledTable(tableName string) {
m.mutex.Lock()
defer m.mutex.Unlock()
// 检查是否已存在
for _, table := range m.config.EnabledTables {
if table == tableName {
return
}
}
m.config.EnabledTables = append(m.config.EnabledTables, tableName)
}
// AddDisabledTable 添加禁用缓存的表
func (m *CacheConfigManager) AddDisabledTable(tableName string) {
m.mutex.Lock()
defer m.mutex.Unlock()
// 检查是否已存在
for _, table := range m.config.DisabledTables {
if table == tableName {
return
}
}
m.config.DisabledTables = append(m.config.DisabledTables, tableName)
}
// RemoveEnabledTable 移除启用缓存的表
func (m *CacheConfigManager) RemoveEnabledTable(tableName string) {
m.mutex.Lock()
defer m.mutex.Unlock()
var newEnabledTables []string
for _, table := range m.config.EnabledTables {
if table != tableName {
newEnabledTables = append(newEnabledTables, table)
}
}
m.config.EnabledTables = newEnabledTables
}
// RemoveDisabledTable 移除禁用缓存的表
func (m *CacheConfigManager) RemoveDisabledTable(tableName string) {
m.mutex.Lock()
defer m.mutex.Unlock()
var newDisabledTables []string
for _, table := range m.config.DisabledTables {
if table != tableName {
newDisabledTables = append(newDisabledTables, table)
}
}
m.config.DisabledTables = newDisabledTables
}
// GetTableCacheStatus 获取表的缓存状态信息
func (m *CacheConfigManager) GetTableCacheStatus(tableName string) map[string]interface{} {
m.mutex.RLock()
defer m.mutex.RUnlock()
status := map[string]interface{}{
"table_name": tableName,
"enabled": m.IsTableCacheEnabled(tableName),
"disabled": m.IsTableCacheDisabled(tableName),
}
// 检查是否在启用列表中
for _, table := range m.config.EnabledTables {
if table == tableName {
status["in_enabled_list"] = true
break
}
}
// 检查是否在禁用列表中
for _, table := range m.config.DisabledTables {
if table == tableName {
status["in_disabled_list"] = true
break
}
}
return status
}
// GetAllTableStatus 获取所有表的缓存状态
func (m *CacheConfigManager) GetAllTableStatus() map[string]interface{} {
m.mutex.RLock()
defer m.mutex.RUnlock()
result := map[string]interface{}{
"enabled_tables": m.config.EnabledTables,
"disabled_tables": m.config.DisabledTables,
"config": map[string]interface{}{
"default_ttl": m.config.DefaultTTL,
"table_prefix": m.config.TablePrefix,
"max_cache_size": m.config.MaxCacheSize,
"cache_complex_sql": m.config.CacheComplexSQL,
"enable_stats": m.config.EnableStats,
"enable_warmup": m.config.EnableWarmup,
"penetration_guard": m.config.PenetrationGuard,
"bloom_filter": m.config.BloomFilter,
"auto_invalidate": m.config.AutoInvalidate,
"invalidate_delay": m.config.InvalidateDelay,
},
}
return result
}