将会话从redis迁移到mysql

9jyewag0  于 2021-06-10  发布在  Redis
关注(0)|答案(1)|浏览(439)

我需要将redis中存储的所有会话迁移到mysql,有没有可能呢?
编辑:
工作代码

$redis = Redis::connection();
    $keys = $redis->keys('*');

    foreach ($keys as $key){
        $payload = base64_encode(unserialize($redis->get($key)));

        $id = str_replace('prefix:', '', $key);

        DB::table('sessions')->insert([
            'id'=>$id,
            'payload'=>$payload,
            'last_activity'=>$date = date('U')
        ]);

    }
uxhixvfz

uxhixvfz1#

因为laravel使用了“symfony”的一些核心组件,所以您可以使用 MigratingSessionHandler 从一个驱动程序迁移到另一个驱动程序的symfony类。它出现在2018年,您的版本可能没有,因此在开始之前,您可能需要将您的版本升级到最新版本之一。
本文档提供了它的工作流程。
如果应用程序更改了会话的存储方式,请使用 Symfony\Component\HttpFoundation\Session\Storage\Handler\MigratingSessionHandler 在新旧存储处理程序之间迁移而不丢失会话数据。
在开始之前,需要为数据库会话驱动程序创建迁移。官方文档提供了模式

Schema::create('sessions', function ($table) {
    $table->string('id')->unique();
    $table->foreignId('user_id')->nullable();
    $table->string('ip_address', 45)->nullable();
    $table->text('user_agent')->nullable();
    $table->text('payload');
    $table->integer('last_activity');
});

相关问题