Fix: 用原始Redis客户端绕过自动前缀,解决hkeys双重前缀找不到用户问题
This commit is contained in:
@@ -96,13 +96,17 @@ class AutoSaveExp extends Command
|
|||||||
$roomMap = [];
|
$roomMap = [];
|
||||||
$cursor = '0';
|
$cursor = '0';
|
||||||
|
|
||||||
|
// 获取原始 Redis 客户端(不自动加前缀),用于直接操作完整 key 名
|
||||||
|
$rawClient = Redis::connection()->client();
|
||||||
|
|
||||||
do {
|
do {
|
||||||
[$cursor, $keys] = Redis::scan($cursor, ['match' => '*room:*:users', 'count' => 100]);
|
[$cursor, $keys] = Redis::scan($cursor, ['match' => '*room:*:users', 'count' => 100]);
|
||||||
foreach ($keys ?? [] as $key) {
|
foreach ($keys ?? [] as $key) {
|
||||||
// 从 key 中提取房间 ID,支持带前缀的格式(如 chatroom-database-room:1:users)
|
// 从 key 中提取房间 ID,支持带前缀的格式(如 chatroom-database-room:1:users)
|
||||||
if (preg_match('/room:(\d+):users/', $key, $m)) {
|
if (preg_match('/room:(\d+):users/', $key, $m)) {
|
||||||
$roomId = (int) $m[1];
|
$roomId = (int) $m[1];
|
||||||
$usernames = Redis::hkeys($key);
|
// 直接用原始客户端查找,避免 Laravel 自动加前缀导致 key 被拼接两次
|
||||||
|
$usernames = $rawClient->hkeys($key);
|
||||||
if (! empty($usernames)) {
|
if (! empty($usernames)) {
|
||||||
$roomMap[$roomId] = $usernames;
|
$roomMap[$roomId] = $usernames;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user