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 }