query("select count(distinct userID) from tab_rolename;"); $page = intval($max / 100) + 1; for ($i = 0; $i < $page; $i++) { $sql = "select distinct userID from tab_rolename limit " . $i * 100 . ", 100;"; $rows = $dao->query($sql)->fetchAll(); foreach ($rows as $r) { foreach (self::ItorUserKeys_Union($r->userID) as $k) { yield $k; } } } # 按照分区遍历玩家keys foreach (GameConfig::zonelist() as $zoneid) { $max = $dao->query("select count(*) from tab_rolename where zoneid=$zoneid;"); $page = intval($max / 100) + 1; $sql = "select * from tab_rolename where zoneid=$zoneid and tid between %d and %d;"; for ($i = 0; $i < $page; $i++) { $rows = $dao->query(sprintf($sql, 0 + $i * 100, $i * 100 + 99))->fetchAll(); foreach ($rows as $user) { $uid = $user->userID; foreach (self::ItorUserKeys_zoned($zoneid, $uid) as $k) { yield $k; } } } } } public static function ItorUserKeys_Union($uid) { yield MemKey_User::Union_PublicState_hash($uid); yield MemKey_User::Union_PlayedZoneInfo_normal($uid); } public static function ItorUserKeys_zoned($zoneid, $uid) { yield MemKey_User::Info_hash($zoneid, $uid); yield MemKey_User::Interact($zoneid, $uid); // yield MemKey_User::Sig($zoneid, $uid); yield MemKey_User::Mail_CurId_int($zoneid, $uid); yield MemKey_User::Mail_Queue_hash($zoneid, $uid); yield MemKey_User::Mail_SysRecord_set($zoneid, $uid); yield MemKey_User::FriendsList_set($zoneid, $uid); yield MemKey_User::FriendsMsgQueue_hash($zoneid, $uid); yield MemKey_User::FriendsOps_hash($zoneid, $uid); yield MemKey_User::GiftOps($zoneid, $uid); if (PLAT == 'web') { yield MemKey_User::GiftStore($zoneid, $uid); yield MemKey_User::TokenInfo($zoneid, $uid); } yield MemKey_User::PayOrders($zoneid, $uid); yield MemKey_User::stat_LotteryRecords($zoneid, $uid); } private static function ItorRuntimeKeys() { foreach (GameConfig::hero() as $heroid => $hero) { foreach (self::ItorRuntimekeys_withHeroid($heroId) as $k) { yield $k; } } foreach (GameConfig::zonelist() as $zoneid => $zone) { foreach (self::ItorRuntimekeys_withZoneid($zoneid) as $k) { yield $k; } $startDay = tsDay($zone->publicTs); $tsday = tsDay(); for ($i = $startDay; $i < $tsday; $i++) { foreach (self::ItorRuntimekeys_withZoneidAndtsDay($zoneid, $i) as $k) { yield $k; } } } } private static function ItorRuntimekeys_withHeroid($heroId) { yield MemKey_GameRun::HeroDiscusses_item_hash($heroId); yield MemKey_GameRun::HeroDiscusses_score_zset($heroId); yield MemKey_GameRun::HeroDiscusses_userScore_normal($heroId); } private static function ItorRuntimekeys_withZoneid($zoneid) { yield MemKey_GameRun::Game_FightPowerRank_zset($zoneid); // # 这里, pvp更早的数据还要不要? 运行时反正是只有最后两周的有用. yield MemKey_GameRun::Game_PVPScoreByZone_zset_curWeek($zoneid); yield MemKey_GameRun::Game_PVPScoreByZone_zset_lastWeek($zoneid); yield MemKey_GameRun::Game_SysMsgByZone_zset($zoneid); yield MemKey_GameRun::Stat_UserCountByZone_int($zoneid); } private static function ItorRuntimekeys_withZoneidAndtsDay($zoneid, $tsday) { yield MemKey_GameRun::Game_UserRecordByZone($zoneid, $tsday); } }