player 后使用) * 登录/信息变更时需调用 deletePlayerByUsername 失效 */ public static function setPlayerByUsername(string $username, array $playerRow): bool { if ($username === '' || empty($playerRow)) { return false; } $ttl = self::playerCacheTtl(); if ($ttl <= 0) { return true; } $key = self::playerCachePrefix() . $username; return Cache::set($key, json_encode($playerRow), $ttl); } /** 按 username 取缓存玩家,未命中返回 null */ public static function getPlayerByUsername(string $username): ?array { if ($username === '') { return null; } if (self::playerCacheTtl() <= 0) { return null; } $key = self::playerCachePrefix() . $username; $val = Cache::get($key); if ($val === null || $val === '') { return null; } $data = json_decode((string) $val, true); return is_array($data) ? $data : null; } /** 退出登录或玩家信息变更时删除玩家缓存 */ public static function deletePlayerByUsername(string $username): bool { if ($username === '') { return false; } $key = self::playerCachePrefix() . $username; $r1 = Cache::delete($key); $snapKey = self::playerInfoSnapshotPrefix() . $username; $r2 = Cache::delete($snapKey); return $r1 || $r2; } /** * 读取 getPlayerInfo 接口用的玩家公开信息快照(未命中返回 null) * @return array|null */ public static function getPlayerInfoSnapshotByUsername(string $username): ?array { if ($username === '') { return null; } if (self::playerInfoSnapshotTtl() <= 0) { return null; } $key = self::playerInfoSnapshotPrefix() . $username; $val = Cache::get($key); if ($val === null || $val === '') { return null; } $data = json_decode((string) $val, true); if (!is_array($data) || !array_key_exists('username', $data)) { return null; } return $data; } /** * 写入 getPlayerInfo 返回体快照(已脱敏数组) * @param array $info */ public static function setPlayerInfoSnapshotByUsername(string $username, array $info): bool { if ($username === '' || empty($info)) { return false; } $ttl = self::playerInfoSnapshotTtl(); if ($ttl <= 0) { return true; } $key = self::playerInfoSnapshotPrefix() . $username; $payload = json_encode($info, JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_SUBSTITUTE); if ($payload === false) { return false; } return Cache::set($key, $payload, $ttl); } }