194 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			194 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | 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 | ||
|  | }  |