perf: 优化挂机心跳接口,无奖励变动心跳拒绝写库save,仅在Redis保活以释放I/O压力

This commit is contained in:
pllx
2026-06-30 11:32:53 +08:00
parent 3563b45038
commit b19073cf85
2 changed files with 15 additions and 11 deletions
+10 -5
View File
@@ -619,15 +619,20 @@ class ChatController extends Controller
$superLevel = (int) Sysparam::getValue('superlevel', '100');
$leveledUp = $this->calculateNewLevel($user, $superLevel);
$user->save(); // 存点入库
$hasChanges = $leveledUp || ($canGainReward && ($actualExpGain > 0 || $actualJjbGain > 0));
if ($hasChanges) {
$user->save(); // 存点入库
// 将新的等级与资产状态反馈给当前用户的在线名单上,确保别人查看到的也是最准确等级
$this->chatState->userJoin($id, $user->username, $this->chatUserPresenceService->build($user));
} else {
// 无变动时,仅在 Redis 层面保活该用户的在线状态,拒绝写库并减少 Redis HSET 负荷
$this->chatState->refreshAlive($id, $user->username);
}
// 手动心跳存点:同步更新在职用户的勤务时长
$this->tickDutyLog($user, $id);
// 3. 将新的等级反馈给当前用户的在线名单上
// 确保刚刚升级后别人查看到的也是最准确等级
$this->chatState->userJoin($id, $user->username, $this->chatUserPresenceService->build($user));
// 4. 如果突破境界,向全房系统喊话广播!
if ($leveledUp) {
// 生成炫酷广播消息发向该频道