| | |
| | | PRE_DBTABLE = "dbTable_" |
| | | ) |
| | | |
| | | type CmapItem struct { |
| | | type AreaMapItem struct { |
| | | sync.Mutex |
| | | Area map[string]*shardmap.ShardMap |
| | | } |
| | | |
| | | var CacheMap *CmapItem |
| | | var CaptureDbMap *AreaMapItem |
| | | var RealNameDbMap = shardmap.New(uint8(*threadnum)) |
| | | var KeyPersonDbMap = shardmap.New(uint8(*threadnum)) |
| | | |
| | | var doOnce sync.Once |
| | | |
| | | func ReInitDbTablePersonsCache() { |
| | | CacheMap.Lock() |
| | | defer CacheMap.Unlock() |
| | | if CacheMap == nil { |
| | | CacheMap = &CmapItem{ |
| | | Area: make(map[string]*shardmap.ShardMap), |
| | | } |
| | | } |
| | | for tableId, _ := range CacheMap.Area { |
| | | delete(CacheMap.Area, tableId) |
| | | } |
| | | |
| | | initDbTablePersonsCache() |
| | | } |
| | | |
| | | func InitDbTablePersons() { |
| | | func InitCache() { |
| | | doOnce.Do(func() { |
| | | flag.Parse() |
| | | |
| | | CacheMap = &CmapItem{ |
| | | CaptureDbMap = &AreaMapItem{ |
| | | Area: make(map[string]*shardmap.ShardMap), |
| | | } |
| | | |
| | | // 初始化未分类, 没有小区id的档案 |
| | | CacheMap.Area[Unfiled] = shardmap.New(uint8(*threadnum)) |
| | | CaptureDbMap.Area[Unfiled] = shardmap.New(uint8(*threadnum)) |
| | | }) |
| | | |
| | | initDbTablePersonsCache() |
| | | initRealNamePersonsCache() |
| | | initKeyPersonsCache() |
| | | } |
| | | |
| | | func ReInitDbTablePersonsCache() { |
| | | CaptureDbMap.Lock() |
| | | defer CaptureDbMap.Unlock() |
| | | |
| | | if CaptureDbMap == nil { |
| | | CaptureDbMap = &AreaMapItem{ |
| | | Area: make(map[string]*shardmap.ShardMap), |
| | | } |
| | | } |
| | | for tableId, _ := range CaptureDbMap.Area { |
| | | delete(CaptureDbMap.Area, tableId) |
| | | } |
| | | |
| | | initDbTablePersonsCache() |
| | | } |
| | | func initDbTablePersonsCache() { |
| | | // 缓存底库中的全部人员信息 |
| | | var dbpApi db.DbPersons |
| | | total, e := dbpApi.GetPersonTotal("") |
| | | |
| | | var psApi db.PersonStatus |
| | | accessAreas, _ := psApi.GetPersonAccessedAreas() |
| | | // 暂时去掉到访小区过滤 |
| | | //var psApi db.PersonStatus |
| | | //accessAreas, _ := psApi.GetPersonAccessedAreas() |
| | | |
| | | logger.Debugf("所有底库共有%d条记录", total) |
| | | logger.Debugf("抓拍档案库共有%d条记录", total) |
| | | if e == nil && total > 0 { |
| | | queryEachNum := *querynum |
| | | qn := int(total) / *threadnum |
| | |
| | | logger.Error(err) |
| | | return |
| | | } |
| | | logger.Debugf("获取%d条人员信息", len(dbPersons)) |
| | | CacheMap.Lock() |
| | | logger.Debugf("eachNum:%d, 获取%d条人员信息", queryEachNum, len(dbPersons)) |
| | | CaptureDbMap.Lock() |
| | | |
| | | areaId := "" |
| | | for _, value := range dbPersons { |
| | | areaId = value.AreaId |
| | | // 没有小区id的人员 |
| | | if areaId == "" { |
| | | CacheMap.Area[Unfiled].Set(value.Id, value) |
| | | CacheMap.Area[Unfiled].Settime() |
| | | CaptureDbMap.Area[Unfiled].Set(value.Id, value) |
| | | CaptureDbMap.Area[Unfiled].Settime() |
| | | continue |
| | | } |
| | | |
| | | for _, areaId := range accessAreas[value.Id] { |
| | | if _, ok := CacheMap.Area[areaId]; !ok { |
| | | CacheMap.Area[areaId] = shardmap.New(uint8(*threadnum)) |
| | | } |
| | | |
| | | CacheMap.Area[areaId].Set(value.Id, value) |
| | | CacheMap.Area[areaId].Settime() |
| | | //for _, areaId := range accessAreas[value.Id] { |
| | | if _, ok := CaptureDbMap.Area[areaId]; !ok { |
| | | CaptureDbMap.Area[areaId] = shardmap.New(uint8(*threadnum)) |
| | | } |
| | | |
| | | CaptureDbMap.Area[areaId].Set(value.Id, value) |
| | | CaptureDbMap.Area[areaId].Settime() |
| | | //} |
| | | } |
| | | |
| | | CacheMap.Unlock() |
| | | CaptureDbMap.Unlock() |
| | | |
| | | }(j) |
| | | } |
| | | wg.Wait() |
| | | logger.Debug("底库人员缓存完成用时:", time.Since(temptime)) |
| | | logger.Debug("抓拍档案库人员缓存完成用时:", time.Since(temptime)) |
| | | |
| | | for k, v := range CaptureDbMap.Area { |
| | | logger.Debugf("Cache area %s item len %d ", k, v.GetLen()) |
| | | } |
| | | } |
| | | } |
| | | |
| | | func initRealNamePersonsCache() { |
| | | var dbApi db.Layouts |
| | | dbPersons, err := dbApi.GetRealNamePersonList() |
| | | if err != nil { |
| | | logger.Error("init real-name persons error,", err.Error()) |
| | | } |
| | | |
| | | for _, value := range dbPersons { |
| | | RealNameDbMap.Set(value.Id, value) |
| | | } |
| | | |
| | | logger.Debugf("常住人口共有%d条记录", len(dbPersons)) |
| | | } |
| | | |
| | | func initKeyPersonsCache() { |
| | | var dbApi db.Layouts |
| | | dbPersons, err := dbApi.GetKeyPersonList() |
| | | if err != nil { |
| | | logger.Error("init real-name persons error,", err.Error()) |
| | | } |
| | | |
| | | for _, value := range dbPersons { |
| | | KeyPersonDbMap.Set(value.Id, value) |
| | | } |
| | | |
| | | logger.Debugf("重点人员共有%d条记录", len(dbPersons)) |
| | | } |
| | | |
| | | // UpdateDbPersonsCacheById 更新缓存中的全部人员信息 |
| | |
| | | logger.Error(err) |
| | | return |
| | | } |
| | | if info.AreaId != "" { |
| | | CacheMap.Lock() |
| | | defer CacheMap.Unlock() |
| | | if _, ok := CacheMap.Area[info.AreaId]; !ok { |
| | | CacheMap.Area[info.AreaId] = shardmap.New(uint8(*threadnum)) |
| | | if info != nil && info.AreaId != "" { |
| | | if _, ok := CaptureDbMap.Area[info.AreaId]; !ok { |
| | | CaptureDbMap.Lock() |
| | | defer CaptureDbMap.Unlock() |
| | | CaptureDbMap.Area[info.AreaId] = shardmap.New(uint8(*threadnum)) |
| | | } |
| | | CacheMap.Area[info.AreaId].Set(info.Id, info) |
| | | CacheMap.Area[info.AreaId].Settime() |
| | | CaptureDbMap.Area[info.AreaId].Set(info.Id, info) |
| | | CaptureDbMap.Area[info.AreaId].Settime() |
| | | } |
| | | } |
| | | |
| | | func DeleteDbPersonsCacheById(id string) { |
| | | for key, _ := range CaptureDbMap.Area { |
| | | CaptureDbMap.Area[key].Del(id) |
| | | } |
| | | } |
| | | |
| | | func RealTimeAddPersonInfoToCache(tableId string, id string, faceFeature string, enable int32, carNo string) { |
| | | CacheMap.Lock() |
| | | defer CacheMap.Unlock() |
| | | if _, ok := CacheMap.Area[tableId]; !ok { |
| | | CacheMap.Area[tableId] = shardmap.New(uint8(*threadnum)) |
| | | CaptureDbMap.Lock() |
| | | defer CaptureDbMap.Unlock() |
| | | if _, ok := CaptureDbMap.Area[tableId]; !ok { |
| | | CaptureDbMap.Area[tableId] = shardmap.New(uint8(*threadnum)) |
| | | } |
| | | var ei = protomsg.Esinfo{ |
| | | Id: id, |
| | |
| | | Enable: enable, |
| | | CarNo: carNo, |
| | | } |
| | | CacheMap.Area[tableId].Set(id, &ei) |
| | | CaptureDbMap.Area[tableId].Set(id, &ei) |
| | | logger.Debug("id:", id, ",tableId:", ",len(faceFeature):", len(faceFeature), ",tableId:", tableId, ",enable:", enable) |
| | | } |
| | | |
| | | func RealTimeDelPersonFromCache(tableId string, id string) { |
| | | logger.Debug("DelPersonFromCache,tableId:", tableId, ",id:", id) |
| | | CacheMap.Lock() |
| | | defer CacheMap.Unlock() |
| | | if _, ok := CacheMap.Area[tableId]; ok { |
| | | CacheMap.Area[tableId].Del(id) |
| | | CaptureDbMap.Lock() |
| | | defer CaptureDbMap.Unlock() |
| | | if _, ok := CaptureDbMap.Area[tableId]; ok { |
| | | CaptureDbMap.Area[tableId].Del(id) |
| | | logger.Debug("DelPerson ok success") |
| | | } else { |
| | | logger.Error("tableId:", tableId, " not exist") |
| | |
| | | |
| | | func RealTimeDelTable(tableId string) { |
| | | logger.Debug("RealTimeDelTable tableId:", tableId) |
| | | CacheMap.Lock() |
| | | defer CacheMap.Unlock() |
| | | CaptureDbMap.Lock() |
| | | defer CaptureDbMap.Unlock() |
| | | |
| | | if dtM, ok := CacheMap.Area[PRE_DBTABLE]; ok { |
| | | if dtM, ok := CaptureDbMap.Area[PRE_DBTABLE]; ok { |
| | | dtM.Del(tableId) |
| | | } |
| | | if _, ok := CacheMap.Area[tableId]; ok { |
| | | delete(CacheMap.Area, tableId) |
| | | if _, ok := CaptureDbMap.Area[tableId]; ok { |
| | | delete(CaptureDbMap.Area, tableId) |
| | | } |
| | | } |
| | | |
| | | // 使底库生效,将底库中的所有生效状态的人特征添加到缓存 |
| | | func RealTimeUpdateTable(tableId string, enable int32) { |
| | | logger.Debug("RealTimeUpdateTable tableId:", tableId, ",enable:", enable) |
| | | CacheMap.Lock() |
| | | defer CacheMap.Unlock() |
| | | CaptureDbMap.Lock() |
| | | defer CaptureDbMap.Unlock() |
| | | |
| | | if _, ok := CacheMap.Area[PRE_DBTABLE]; !ok { |
| | | CacheMap.Area[PRE_DBTABLE] = shardmap.New(uint8(*threadnum)) |
| | | if _, ok := CaptureDbMap.Area[PRE_DBTABLE]; !ok { |
| | | CaptureDbMap.Area[PRE_DBTABLE] = shardmap.New(uint8(*threadnum)) |
| | | } |
| | | CacheMap.Area[PRE_DBTABLE].Set(tableId, enable == 1) |
| | | CaptureDbMap.Area[PRE_DBTABLE].Set(tableId, enable == 1) |
| | | } |
| | | |
| | | func UpdateCache(changeMsg *protomsg.EsPersonCacheChange) { |