MemKeyList.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. namespace loyalsoft;
  3. DebugHelper::checkkPHPVersion("5.5.0"); # 检查PHP版本, yield关键字在5.5以后提供
  4. /**
  5. * Description of MemKeyList
  6. * 后台工具, 列出Mem中所有的keys.
  7. * @version
  8. * 1.0.0 Created at 2017-9-11. by --gwang
  9. * @author gwang (mail@wanggangzero.cn)
  10. * @copyright ? 2017-9-11, SJZ LoyalSoft Corporation & gwang. All rights reserved.
  11. */
  12. class MemKeyList {
  13. //put your code here
  14. public static function ItorAllKeys() {
  15. foreach (self::ItorRuntimeKeys() as $k) {
  16. echo $k . PHP_EOL;
  17. }
  18. foreach (self::ItorUserKeys() as $k) {
  19. echo $k . PHP_EOL;
  20. }
  21. }
  22. private static function ItorUserKeys() {
  23. $dao = daoInst();
  24. # 遍历玩家分区无关的keys
  25. $max = $dao->query("select count(distinct userID) from tab_rolename;");
  26. $page = intval($max / 100) + 1;
  27. for ($i = 0; $i < $page; $i++) {
  28. $sql = "select distinct userID from tab_rolename limit " . $i * 100 . ", 100;";
  29. $rows = $dao->query($sql)->fetchAll();
  30. foreach ($rows as $r) {
  31. foreach (self::ItorUserKeys_Union($r->userID) as $k) {
  32. yield $k;
  33. }
  34. }
  35. }
  36. # 按照分区遍历玩家keys
  37. foreach (GameConfig::zonelist() as $zoneid) {
  38. $max = $dao->query("select count(*) from tab_rolename where zoneid=$zoneid;");
  39. $page = intval($max / 100) + 1;
  40. $sql = "select * from tab_rolename where zoneid=$zoneid and tid between %d and %d;";
  41. for ($i = 0; $i < $page; $i++) {
  42. $rows = $dao->query(sprintf($sql, 0 + $i * 100, $i * 100 + 99))->fetchAll();
  43. foreach ($rows as $user) {
  44. $uid = $user->userID;
  45. foreach (self::ItorUserKeys_zoned($zoneid, $uid) as $k) {
  46. yield $k;
  47. }
  48. }
  49. }
  50. }
  51. }
  52. public static function ItorUserKeys_Union($uid) {
  53. yield MemKey_User::Union_PublicState_hash($uid);
  54. yield MemKey_User::Union_PlayedZoneInfo_normal($uid);
  55. }
  56. public static function ItorUserKeys_zoned($zoneid, $uid) {
  57. yield MemKey_User::Info_hash($zoneid, $uid);
  58. yield MemKey_User::Interact($zoneid, $uid);
  59. yield MemKey_User::Sig($zoneid, $uid);
  60. yield MemKey_User::Mail_CurId_int($zoneid, $uid);
  61. yield MemKey_User::Mail_Queue_hash($zoneid, $uid);
  62. yield MemKey_User::Mail_SysRecord_set($zoneid, $uid);
  63. yield MemKey_User::FriendsList_set($zoneid, $uid);
  64. yield MemKey_User::FriendsMsgQueue_hash($zoneid, $uid);
  65. yield MemKey_User::FriendsOps_hash($zoneid, $uid);
  66. yield MemKey_User::GiftOps($zoneid, $uid);
  67. if (PLAT == 'web') {
  68. yield MemKey_User::GiftStore($zoneid, $uid);
  69. yield MemKey_User::TokenInfo($zoneid, $uid);
  70. }
  71. yield MemKey_User::PayOrders($zoneid, $uid);
  72. yield MemKey_User::stat_LotteryRecords($zoneid, $uid);
  73. }
  74. private static function ItorRuntimeKeys() {
  75. foreach (GameConfig::hero() as $heroid => $hero) {
  76. foreach (self::ItorRuntimekeys_withHeroid($heroId) as $k) {
  77. yield $k;
  78. }
  79. }
  80. foreach (GameConfig::zonelist() as $zoneid => $zone) {
  81. foreach (self::ItorRuntimekeys_withZoneid($zoneid) as $k) {
  82. yield $k;
  83. }
  84. $startDay = tsDay($zone->publicTs);
  85. $tsday = tsDay();
  86. for ($i = $startDay; $i < $tsday; $i++) {
  87. foreach (self::ItorRuntimekeys_withZoneidAndtsDay($zoneid, $i) as $k) {
  88. yield $k;
  89. }
  90. }
  91. }
  92. }
  93. private static function ItorRuntimekeys_withHeroid($heroId) {
  94. yield MemKey_GameRun::HeroDiscusses_item_hash($heroId);
  95. yield MemKey_GameRun::HeroDiscusses_score_zset($heroId);
  96. yield MemKey_GameRun::HeroDiscusses_userScore_normal($heroId);
  97. }
  98. private static function ItorRuntimekeys_withZoneid($zoneid) {
  99. yield MemKey_GameRun::Game_FightPowerRank_zset($zoneid);
  100. // # 这里, pvp更早的数据还要不要? 运行时反正是只有最后两周的有用.
  101. yield MemKey_GameRun::Game_PVPScoreByZone_zset_curWeek($zoneid);
  102. yield MemKey_GameRun::Game_PVPScoreByZone_zset_lastWeek($zoneid);
  103. yield MemKey_GameRun::Game_SysMsgByZone_zset($zoneid);
  104. yield MemKey_GameRun::Stat_UserCountByZone_int($zoneid);
  105. }
  106. private static function ItorRuntimekeys_withZoneidAndtsDay($zoneid, $tsday) {
  107. yield MemKey_GameRun::Game_UserRecordByZone($zoneid, $tsday);
  108. }
  109. }