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