Spaces:
Runtime error
Runtime error
| package common | |
| import ( | |
| "sync" | |
| "sync/atomic" | |
| ) | |
| // DiskCacheConfig 磁盘缓存配置(由 performance_setting 包更新) | |
| type DiskCacheConfig struct { | |
| // Enabled 是否启用磁盘缓存 | |
| Enabled bool | |
| // ThresholdMB 触发磁盘缓存的请求体大小阈值(MB) | |
| ThresholdMB int | |
| // MaxSizeMB 磁盘缓存最大总大小(MB) | |
| MaxSizeMB int | |
| // Path 磁盘缓存目录 | |
| Path string | |
| } | |
| // 全局磁盘缓存配置 | |
| var diskCacheConfig = DiskCacheConfig{ | |
| Enabled: false, | |
| ThresholdMB: 10, | |
| MaxSizeMB: 1024, | |
| Path: "", | |
| } | |
| var diskCacheConfigMu sync.RWMutex | |
| // GetDiskCacheConfig 获取磁盘缓存配置 | |
| func GetDiskCacheConfig() DiskCacheConfig { | |
| diskCacheConfigMu.RLock() | |
| defer diskCacheConfigMu.RUnlock() | |
| return diskCacheConfig | |
| } | |
| // SetDiskCacheConfig 设置磁盘缓存配置 | |
| func SetDiskCacheConfig(config DiskCacheConfig) { | |
| diskCacheConfigMu.Lock() | |
| defer diskCacheConfigMu.Unlock() | |
| diskCacheConfig = config | |
| } | |
| // IsDiskCacheEnabled 是否启用磁盘缓存 | |
| func IsDiskCacheEnabled() bool { | |
| diskCacheConfigMu.RLock() | |
| defer diskCacheConfigMu.RUnlock() | |
| return diskCacheConfig.Enabled | |
| } | |
| // GetDiskCacheThresholdBytes 获取磁盘缓存阈值(字节) | |
| func GetDiskCacheThresholdBytes() int64 { | |
| diskCacheConfigMu.RLock() | |
| defer diskCacheConfigMu.RUnlock() | |
| return int64(diskCacheConfig.ThresholdMB) << 20 | |
| } | |
| // GetDiskCacheMaxSizeBytes 获取磁盘缓存最大大小(字节) | |
| func GetDiskCacheMaxSizeBytes() int64 { | |
| diskCacheConfigMu.RLock() | |
| defer diskCacheConfigMu.RUnlock() | |
| return int64(diskCacheConfig.MaxSizeMB) << 20 | |
| } | |
| // GetDiskCachePath 获取磁盘缓存目录 | |
| func GetDiskCachePath() string { | |
| diskCacheConfigMu.RLock() | |
| defer diskCacheConfigMu.RUnlock() | |
| return diskCacheConfig.Path | |
| } | |
| // DiskCacheStats 磁盘缓存统计信息 | |
| type DiskCacheStats struct { | |
| // 当前活跃的磁盘缓存文件数 | |
| ActiveDiskFiles int64 `json:"active_disk_files"` | |
| // 当前磁盘缓存总大小(字节) | |
| CurrentDiskUsageBytes int64 `json:"current_disk_usage_bytes"` | |
| // 当前内存缓存数量 | |
| ActiveMemoryBuffers int64 `json:"active_memory_buffers"` | |
| // 当前内存缓存总大小(字节) | |
| CurrentMemoryUsageBytes int64 `json:"current_memory_usage_bytes"` | |
| // 磁盘缓存命中次数 | |
| DiskCacheHits int64 `json:"disk_cache_hits"` | |
| // 内存缓存命中次数 | |
| MemoryCacheHits int64 `json:"memory_cache_hits"` | |
| // 磁盘缓存最大限制(字节) | |
| DiskCacheMaxBytes int64 `json:"disk_cache_max_bytes"` | |
| // 磁盘缓存阈值(字节) | |
| DiskCacheThresholdBytes int64 `json:"disk_cache_threshold_bytes"` | |
| } | |
| var diskCacheStats DiskCacheStats | |
| // GetDiskCacheStats 获取缓存统计信息 | |
| func GetDiskCacheStats() DiskCacheStats { | |
| stats := DiskCacheStats{ | |
| ActiveDiskFiles: atomic.LoadInt64(&diskCacheStats.ActiveDiskFiles), | |
| CurrentDiskUsageBytes: atomic.LoadInt64(&diskCacheStats.CurrentDiskUsageBytes), | |
| ActiveMemoryBuffers: atomic.LoadInt64(&diskCacheStats.ActiveMemoryBuffers), | |
| CurrentMemoryUsageBytes: atomic.LoadInt64(&diskCacheStats.CurrentMemoryUsageBytes), | |
| DiskCacheHits: atomic.LoadInt64(&diskCacheStats.DiskCacheHits), | |
| MemoryCacheHits: atomic.LoadInt64(&diskCacheStats.MemoryCacheHits), | |
| DiskCacheMaxBytes: GetDiskCacheMaxSizeBytes(), | |
| DiskCacheThresholdBytes: GetDiskCacheThresholdBytes(), | |
| } | |
| return stats | |
| } | |
| // IncrementDiskFiles 增加磁盘文件计数 | |
| func IncrementDiskFiles(size int64) { | |
| atomic.AddInt64(&diskCacheStats.ActiveDiskFiles, 1) | |
| atomic.AddInt64(&diskCacheStats.CurrentDiskUsageBytes, size) | |
| } | |
| // DecrementDiskFiles 减少磁盘文件计数 | |
| func DecrementDiskFiles(size int64) { | |
| if atomic.AddInt64(&diskCacheStats.ActiveDiskFiles, -1) < 0 { | |
| atomic.StoreInt64(&diskCacheStats.ActiveDiskFiles, 0) | |
| } | |
| if atomic.AddInt64(&diskCacheStats.CurrentDiskUsageBytes, -size) < 0 { | |
| atomic.StoreInt64(&diskCacheStats.CurrentDiskUsageBytes, 0) | |
| } | |
| } | |
| // IncrementMemoryBuffers 增加内存缓存计数 | |
| func IncrementMemoryBuffers(size int64) { | |
| atomic.AddInt64(&diskCacheStats.ActiveMemoryBuffers, 1) | |
| atomic.AddInt64(&diskCacheStats.CurrentMemoryUsageBytes, size) | |
| } | |
| // DecrementMemoryBuffers 减少内存缓存计数 | |
| func DecrementMemoryBuffers(size int64) { | |
| atomic.AddInt64(&diskCacheStats.ActiveMemoryBuffers, -1) | |
| atomic.AddInt64(&diskCacheStats.CurrentMemoryUsageBytes, -size) | |
| } | |
| // IncrementDiskCacheHits 增加磁盘缓存命中次数 | |
| func IncrementDiskCacheHits() { | |
| atomic.AddInt64(&diskCacheStats.DiskCacheHits, 1) | |
| } | |
| // IncrementMemoryCacheHits 增加内存缓存命中次数 | |
| func IncrementMemoryCacheHits() { | |
| atomic.AddInt64(&diskCacheStats.MemoryCacheHits, 1) | |
| } | |
| // ResetDiskCacheStats 重置命中统计信息(不重置当前使用量) | |
| func ResetDiskCacheStats() { | |
| atomic.StoreInt64(&diskCacheStats.DiskCacheHits, 0) | |
| atomic.StoreInt64(&diskCacheStats.MemoryCacheHits, 0) | |
| } | |
| // ResetDiskCacheUsage 重置磁盘缓存使用量统计(用于清理缓存后) | |
| func ResetDiskCacheUsage() { | |
| atomic.StoreInt64(&diskCacheStats.ActiveDiskFiles, 0) | |
| atomic.StoreInt64(&diskCacheStats.CurrentDiskUsageBytes, 0) | |
| } | |
| // SyncDiskCacheStats 从实际磁盘状态同步统计信息 | |
| // 用于修正统计与实际不符的情况 | |
| func SyncDiskCacheStats() { | |
| fileCount, totalSize, err := GetDiskCacheInfo() | |
| if err != nil { | |
| return | |
| } | |
| atomic.StoreInt64(&diskCacheStats.ActiveDiskFiles, int64(fileCount)) | |
| atomic.StoreInt64(&diskCacheStats.CurrentDiskUsageBytes, totalSize) | |
| } | |
| // IsDiskCacheAvailable 检查是否可以创建新的磁盘缓存 | |
| func IsDiskCacheAvailable(requestSize int64) bool { | |
| if !IsDiskCacheEnabled() { | |
| return false | |
| } | |
| maxBytes := GetDiskCacheMaxSizeBytes() | |
| currentUsage := atomic.LoadInt64(&diskCacheStats.CurrentDiskUsageBytes) | |
| return currentUsage+requestSize <= maxBytes | |
| } | |