package svc import ( "applet/app/db" "applet/app/utils" "applet/app/utils/cache" "fmt" "xorm.io/xorm" ) const AutoCachingTop100LockKey = "egg_energy_auto_caching_top100_lock_key" const HeroListRedisRankKey = "EggEnergy:HomePage:HeroList:Rank:%d" // 1.kind func AutoCachingTop100(engine *xorm.Engine) { fmt.Println("egg_energy_auto_caching_top100...") defer func() { if err := recover(); err != nil { fmt.Println(err) return } }() fmt.Println("----------------------------AutoCachingTop100_Begin-------------------------------") getString, _ := cache.GetString(AutoCachingTop100LockKey) if getString != "" { fmt.Println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "上一次缓存前一百用户未执行完") return } cache.SetEx(AutoCachingTop100LockKey, "running", 10*60) // 10 min defer cache.Del(AutoCachingTop100LockKey) for i := 1; i <= 3; i++ { sql := "SELECT user_virtual_coin_flow_aggregation.*" + "FROM `user_virtual_coin_flow_aggregation` " + "WHERE 1=1" switch i { case 1: sql += " ORDER BY user_virtual_coin_flow_aggregation.today_data" case 2: sql += " ORDER BY user_virtual_coin_flow_aggregation.this_week_data" case 3: sql += " ORDER BY user_virtual_coin_flow_aggregation.this_month_data" } sql += " Desc LIMIT %d, %d;" sql = fmt.Sprintf(sql, 0, 100) res, err := db.QueryNativeString(engine, sql) if err != nil { fmt.Println("AutoCachingTop100_Err ===================>" + err.Error()) return } rankCacheKey := fmt.Sprintf(HeroListRedisRankKey, i) for _, item := range res { switch i { case 1: _, err = cache.ZAdd(rankCacheKey, utils.StrToFloat64(item["today_data"]), item["uid"]) if err != nil { fmt.Println("AutoCachingTop100_FailedToCacheData_Err ==================>" + err.Error()) return } case 2: _, err := cache.ZAdd(rankCacheKey, utils.StrToFloat64(item["this_week_data"]), item["uid"]) if err != nil { fmt.Println("AutoCachingTop100_FailedToCacheData_Err ==================>" + err.Error()) return } case 3: _, err := cache.ZAdd(rankCacheKey, utils.StrToFloat64(item["this_month_data"]), item["uid"]) if err != nil { fmt.Println("AutoCachingTop100_FailedToCacheData_Err ==================>" + err.Error()) return } } } fmt.Println("----------------------------AutoCachingTop100_End-------------------------------") } }