public function __invoke(RequestInterface $requestInterface, ResponseInterface $responseInterface, $next) { if (!$this->clientIdentifier) { if (!empty($_SERVER['HTTP_CF_CONNECTING_IP'])) { $reformattedSource = preg_replace("/[.:]/", "_", $_SERVER['HTTP_CF_CONNECTING_IP']); } else { $reformattedSource = preg_replace("/[.:]/", "_", $_SERVER['REMOTE_ADDR']); } } else { $reformattedSource = $this->clientIdentifier; } $requestCount = count($this->redis->keys(sprintf("rl.%s.*", $reformattedSource))); if ($requestCount > $this->maxRequests) { $responseInterface = $responseInterface->withStatus(429); $responseInterface->getBody()->write("Rate limit exceeded."); return $responseInterface; } else { $key = sprintf("rl.%s.%s", $reformattedSource, microtime(true)); $this->redis->set($key, 1); $this->redis->expire($key, $this->expire); $responseInterface = $next($requestInterface, $responseInterface); } return $responseInterface; }
/** * 合并夺宝数据 */ protected function merge_grab_treasure() { $source_redis = new RedisClient(array('host' => $this->_source_host, 'port' => $this->_redis_port)); $target_redis = new RedisClient(array('host' => $this->_target_host, 'port' => $this->_redis_port)); echo "move data|player_sum_fpower_list \n"; $key = "data|player_sum_fpower_list"; $data = $source_redis->zsets_all($key); if ($data) { foreach ($data as $player_id) { $score = $source_redis->zsets_score($key, $player_id); $result = $target_redis->zsets_add($key, $player_id, $score); if (!$result) { file_put_contents("data|player_sum_fpower_list.log", "{$player_id}\n", FILE_APPEND); } } } echo "move data|player_sum_fpower_list end\n"; $hash_data_keys = array('data|player_cross_info', 'data|grab_treasure', 'data|grab_treasure_log'); foreach ($hash_data_keys as $hash_key) { echo "move {$hash_key}\n"; $keys = $source_redis->keys("{$hash_key}:*"); if ($keys) { foreach ($keys as $key) { $data = $source_redis->hash_get($key); if ($data) { $result = $target_redis->hash_set($key, $data); if (!$result) { file_put_contents("{$hash_key}.log", "{$key}\n", FILE_APPEND); } } } } echo "move {$hash_key} end\n"; } echo "move data|grab_treasure_log_rank \n"; $keys = $source_redis->keys("data|grab_treasure_log_rank:*"); if ($keys) { foreach ($keys as $key) { if ($target_redis->exists($key)) { continue; } $data = $source_redis->list_all($key); if ($data) { foreach ($data as $val) { $result = $target_redis->list_push($key, $val); if (!$result) { file_put_contents("data|grab_treasure_log_rank.log", "{$val}\n", FILE_APPEND); } } } } } echo "move data|grab_treasure_log_rank end\n"; echo "move data|player_grab_treasure_safe_mark\n"; $keys = $source_redis->keys("data|player_grab_treasure_safe_mark:*"); if ($keys) { foreach ($keys as $key) { $cd = $source_redis->ttl($key); $result = $target_redis->set($key, 0, $cd); if (!$result) { file_put_contents("data|player_grab_treasure_safe_mark.log", "{$key}\n", FILE_APPEND); } } } echo "move data|player_grab_treasure_safe_mark end\n"; echo "move data|player_grab_treasure_battle_lock\n"; $keys = $source_redis->keys("data|player_grab_treasure_battle_lock:*"); if ($keys) { foreach ($keys as $key) { $cd = $source_redis->ttl($key); $result = $target_redis->set($key, 1, $cd); if (!$result) { file_put_contents("data|player_grab_treasure_battle_lock.log", "{$key}\n", FILE_APPEND); } } } echo "move data|player_grab_treasure_battle_lock end\n"; $source_redis->close(); $target_redis->close(); }