이 코드는 고객 구성에 대한 데이터를 저장하는 동시 맵을 관리합니다. 서버 시작 중에 특정 파일의 데이터를 맵으로 로드합니다. 또한 새 파일을 모니터링하고 해당 파일의 데이터로 지도를 업데이트하여 이전 상태를 지웁니다.
읽기 방법에 오류가 발생하면 문제가 발생합니다. 이 경우 이전 구성 데이터를 유지해야 함에도 불구하고 전체 맵이 지워져 비어 있습니다.
제안된 솔루션은 데이터 관리 프로세스를 단순화합니다.
<code class="go">type CustomerConfig struct { Data map[string]bool // Add other properties if needed LoadedAt time.Time } func loadConfig() (*CustomerConfig, error) { cfg := &CustomerConfig{ Data: map[string]bool{}, LoadedAt: time.Now(), } // Implement the file loading logic here // If an error occurs, return it // If successful, return the config return cfg, nil } type ConfigCache struct { configMu sync.RWMutex config *CustomerConfig closeCh chan struct{} } func NewConfigCache() (*ConfigCache, error) { cfg, err := loadConfig() if err != nil { return nil, fmt.Errorf("loading initial config failed: %w", err) } cc := &ConfigCache{ config: cfg, closeCh: make(chan struct{}), } // Launch goroutine to refresh config go cc.refresher() return cc, nil } func (cc *ConfigCache) refresher() { ticker := time.NewTicker(1 * time.Minute) // Every minute defer ticker.Stop() for { select { case <-ticker.C: // Implement the logic to detect changes changes := false if !changes { continue } cfg, err := loadConfig() if err != nil { log.Printf("Failed to load config: %v", err) continue } cc.configMu.Lock() cc.config = cfg cc.configMu.Unlock() case <-cc.closeCh: return } } } func (cc *ConfigCache) Stop() { close(cc.closeCh) } func (cc *ConfigCache) GetConfig() *CustomerConfig { cc.configMu.RLock() defer cc.configMu.RUnlock() return cc.config }</code>
<code class="go">// Initialize the cache cc, err := NewConfigCache() if err != nil { // Handle the error } // Get the current configuration when needed cfg := cc.GetConfig() // Remember to stop the cache manager when appropriate cc.Stop()</code>
이 솔루션은 이전 구성이 손실되는 문제를 방지하고 구성 업데이트 처리를 단순화합니다.
위 내용은 증분 업데이트를 통해 동시 고객 구성 데이터를 관리하고 데이터 손실을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!