iNickolay
@iNickolay

Как работать с сессиями пользователя в Laravel используя Redis?

Это мой первый опыт с Redis, так что мог упустить что-то очень простое

Приветствую! В документации указано, что с сессиями можно работать через session() или Request.

Когда сессии были на MySQL, что бы получить все сессии пользователя достаточно было выполонить это:
$sessions = request()->user()->sessions()->get();

Когда сессии хранятся в Redis'e - запрос выше выдаёт ошибку:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'develop.sessions' doesn't exist


Судя по
Illuminate\Support\Facades\Redis::connection('session')->keys('*')
- сессии работают,
в phpRedisAdmin - тоже таблица с данными пользователя есть, но называется она почему-то project_database_project_cache

В config/database.php добавил ещё один коннект session:
Код

'redis' => [

        'client' => env('REDIS_CLIENT', 'phpredis'),

        'options' => [
            'cluster' => env('REDIS_CLUSTER', 'predis'),
            'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
        ],

        'default' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_DB', 0),
        ],

        'cache' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_CACHE_DB', 1),
        ],

        'session' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_SESSION_DB', 2),
        ],

    ],

В .env файл добавил переменную SESSION_CONNECTION=session и REDIS_PASSWORD=password

Что было сделано:
php artisan optimize:clear
php artisan clear-compiled
composer dump-autoload
reboot
  • Вопрос задан
  • 315 просмотров
Решения вопроса 1
@Samuel_Leonardo
Redis драйвер не предлагает той же гибкости, что и database

Если из базы вы можете сделать выборку по любому полю,
то в редисе у вас ключ => значение,
при этом имя ключа никак не связано с id пользователя,
вы, конечно, можете взять все сессии из редиса и перебрать их с соответствующими затратами по времени

отдельный connection делают, чтобы сессии не перемешивалсь с кэшем ,
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы