Fix: 用原始Redis客户端绕过自动前缀,解决hkeys双重前缀找不到用户问题
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user