package shortvideo import ( "91porn-server/common/constant/redisconst" "91porn-server/common/redis" "fmt" "time" "91porn-server/common/log" "91porn-server/common/timeutil/timerange" "91porn-server/models/s/statrecordmod" "91porn-server/models/v/vidmod" ) func RunSync(defaultDate time.Time) { log.Info("Redis short video sync start...") defer log.Info("Redis short video sync end.") // 如果短视频缓存存在的数据量过低,表示缓存被清理过,需要重新同步 c, err := redis.Handler.SCard(redisconst.ShortVideosKey) if err == nil && c < 1000 { _ = statrecordmod.UpsertOneTrans(nil, statrecordmod.RedisSyncShortVideoJob, defaultDate) } // 获取上次数据同步的记录时间 lastSyncAt, err := statrecordmod.LastRecordTime(statrecordmod.RedisSyncShortVideoJob, defaultDate) if err != nil { log.Error("Redis sync short video data RunSync get last record time failed", log.E(err)) return } var now = time.Now() var recentMinute = timerange.RecentMinute(now, statrecordmod.OneDayScale) for recentMinute.After(lastSyncAt) { var end = lastSyncAt.Add(statrecordmod.OneDayScale * time.Minute) if end.After(recentMinute) { end = recentMinute } //// 获取MID //ret, err := moduleconfmod.GetModuleConfByType(moduleconfmod.ShortPage) //if err != nil { // log.Error("Redis sync short video data RunSync get module conf failed", log.E(err)) // return //} //midMap := make(map[string]any) //for _, v := range ret { // midMap[v.ID.Hex()] = nil //} var subTimeRange = timerange.TimeRange{ Head: lastSyncAt, Tail: end, } var page, size = 1, 1000 hasNext := true var data []*vidmod.VideoModel for hasNext { data, hasNext, err = vidmod.GetShortVideoListByUpdateTimeRange(subTimeRange.Head, subTimeRange.Tail, page, size) if err != nil { log.Error("Redis sync short video data GetVideoListByUpdateTimeRange err! ", log.E(err)) return } if hasNext && len(data) > 0 { _ = SyncDataToRedis(data) page++ } else { if err = commit(data, subTimeRange.Tail); err != nil { log.Error("Redis sync short video data RunSync commit err! ", log.E(err)) return } } } lastSyncAt = end } } func commit(data []*vidmod.VideoModel, syncTime time.Time) error { if len(data) <= 0 { _ = statrecordmod.UpsertOneTrans(nil, statrecordmod.RedisSyncShortVideoJob, syncTime) return nil } if err := SyncDataToRedis(data); err != nil { return fmt.Errorf("Redis sync commit short video data SyncDataToES failed!, err:%+v\n", err) } if err := statrecordmod.UpsertOneTrans(nil, statrecordmod.RedisSyncShortVideoJob, syncTime); err != nil { return fmt.Errorf("Redis sync commit short video data UpsertOneTrans failed!, err:%+v\n", err) } return nil }