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
 | |
| }  |