v0.1
This commit is contained in:
194
internal/shared/cache/cache_config_manager.go
vendored
Normal file
194
internal/shared/cache/cache_config_manager.go
vendored
Normal file
@@ -0,0 +1,194 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user