package sqlAsyncMgr import ( "sync" "sync/atomic" ) // SqlAsyncIdentityStatistics sql标识统计类 type SqlAsyncIdentityStatistics struct { // 锁对象 m sync.Mutex // 当前正在同步的sql数量 syncCount int32 // 待同步的统计 statisticData map[string]*StatisticModel } // newSqlAsyncIdentityStatistics 创建新StatisticModel对象 func newSqlAsyncIdentityStatistics() *SqlAsyncIdentityStatistics { return &SqlAsyncIdentityStatistics{ statisticData: make(map[string]*StatisticModel), } } // getItem 获取指定统计对象 func (this *SqlAsyncIdentityStatistics) getItem(_identityId string, isCreate bool) *StatisticModel { this.m.Lock() defer this.m.Unlock() if item, exists := this.statisticData[_identityId]; exists { return item } if isCreate == false { return nil } newItem := newStatisticModel(_identityId) this.statisticData[_identityId] = newItem return newItem } // AddCount 指定标识添加数量 func (this *SqlAsyncIdentityStatistics) AddCount(_identityId string, count int32) { model := this.getItem(_identityId, true) model.AddCount(count) // 原子操作相加 atomic.AddInt32(&this.syncCount, count) } // Reduce 指定标识减少数量 func (this *SqlAsyncIdentityStatistics) Reduce(_identityId string, count int32) { if model := this.getItem(_identityId, false); model != nil { model.ReduceCount(count) } // 原子操作相减 atomic.AddInt32(&this.syncCount, -count) } // GetCount 获取指定标识的数量 func (this *SqlAsyncIdentityStatistics) GetCount(_identityId string) int32 { if model := this.getItem(_identityId, false); model != nil { return model.Count } return 0 } // GetAllCount 获取总的待写入数据 func (this *SqlAsyncIdentityStatistics) GetAllCount() int32 { return this.syncCount }