Fix: 用原始Redis客户端绕过自动前缀,解决hkeys双重前缀找不到用户问题

This commit is contained in:
2026-02-27 12:42:45 +08:00
parent 36fc073971
commit 2bbb13e85b
+5 -1
View File
@@ -96,13 +96,17 @@ class AutoSaveExp extends Command
$roomMap = [];
$cursor = '0';
// 获取原始 Redis 客户端(不自动加前缀),用于直接操作完整 key 名
$rawClient = Redis::connection()->client();
do {
[$cursor, $keys] = Redis::scan($cursor, ['match' => '*room:*:users', 'count' => 100]);
foreach ($keys ?? [] as $key) {
// 从 key 中提取房间 ID,支持带前缀的格式(如 chatroom-database-room:1:users
if (preg_match('/room:(\d+):users/', $key, $m)) {
$roomId = (int) $m[1];
$usernames = Redis::hkeys($key);
// 直接用原始客户端查找,避免 Laravel 自动加前缀导致 key 被拼接两次
$usernames = $rawClient->hkeys($key);
if (! empty($usernames)) {
$roomMap[$roomId] = $usernames;
}