Laravel会话数据库驱动程序随机冻结数据库

时间:2019-02-03 16:00:08

标签: laravel

使用DB会话驱动程序运行laravel 5.4。随机我有数千个

update `sessions` set `payload` where id ....

通过mysql查看进程列表时。

似乎Laravel决定突然更新大量会话,从而导致整个数据库变得无响应(数据库在专用服务器上运行),并且最大连接数很快就被填满。我的会话寿命很长(因为我不想注销用户),因此会话表很大。

我试图将彩票的数量限制为0、100,以防造成问题,但仍无济于事。

有什么想法可能导致这种情况/我可以尝试什么?

sessions表是INNODB,ID和user_id中的索引

1 个答案:

答案 0 :(得分:0)

上周我遇到了同样的问题。

您之所以大吃一惊,是因为您真的不知道发生了什么,甚至更糟:是什么引起了这个问题

我使用数据库会话驱动器已经快两年了,这种情况以前从未发生过。

解决方案是将会话驱动器更改为REDIS。

config/session.php中,更改连接键:

 'connection' => 'session'

config/database.php中,在redis条目上添加以下行:

'redis' => [

    'cluster' => false,

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

    'session' => [
        'host' => env('REDIS_HOST', 'localhost'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => 1,
    ],

],

再添加一个条目“会话”的原因是:

  • 如果您运行:

php artisan cache:clear

所有会话都将被清除,不仅是缓存本身。

因此,为避免这种情况,只需添加此新条目即可。

您可以在此处找到更多信息:

Redis As Session Driver With Laravel