config/database.php
'redis' => [
// ...
'sessions' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 13,
],
]
Don't forget to register the command in the console Kernel.
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class SessionDatabaseToRedis extends Command
{
protected $signature = 'sessions:migrate_database_to_redis';
protected $description = 'Переносит сессии из базы в редис, лайк э про';
public function handle()
{
DB::table('sessions')->chunkById(1000, function($sessions) {
foreach ($sessions as $session) {
$sessionID = $session->id;
$sessionData = serialize(base64_decode($session->payload));
echo "*3\r\n$3\r\nSET\r\n$" . (strlen($sessionID) + 8) . "\r\nlaravel:" . $sessionID . "\r\n$" . strlen($sessionData) . "\r\n" . $sessionData . "\r\n";
}
});
return 0;
}
}
The -n 13
part is about Redis database number. Check it out in the config/database file.
$ php artisan sessions:migrate_database_to_redis | redis-cli -n 13 --pipe
.env
SESSION_DRIVER=redis
SESSION_CONNECTION=sessions
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
$ php artisan cache:clear && php artisan config:cache
You're awesome!
Channel | Author |
---|---|
Russian version:
https://apmyp.pro/posts/laravel-migrate-session-database-to-redis/