遇到 Laravel Redis 的一个坑,分享下

最近学习 session,设置 session 的底层驱动是 redis,于是用了 laravel 默认的 redis 设置:

'redis' => [
        'client' => 'predis',

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

连接后发现被坑了,错误信息是:

Error while reading line from the server. [tcp://127.0.0.1:6379]

但是我用 php 的 redis 扩展 phpredis 连接毫无问题,于是我在网上查,发现大家的建议是加一个配置:

'redis' => [
        'client' => 'predis',

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

然而发现并没有什么用。。。一度想要自定义 session 的驱动。。。

于是我只能跟着 predis 的代码一行一行的走,终于发现是这货:

   'database' => 0,

由于我的 redis 加了代理 Twemproxy,而 predis 对这个配置默认执行 select 操作,导致了连接错误。

大家以后要注意,如果 redis 有代理的话,别忘了把这个配置删掉。

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 4
Jourdon

database是指存在redis 的第几个数据库。如果只有一个当然没问题。但是如果有多个redis库。你这里删除掉后果.....

6年前 评论

@王东哲 如果 redis 用了代理的话,predis 会发送 select 命令,这里直接就会报错,所以用了代理就没办法用多数据库了

6年前 评论

修改连接配置
'client' => 'phpredis'
'persistent'=>true

    'redis' => [

        'client' => 'phpredis',
        'options'=>[
            'timeout'=>8*3600,
            'read_timeout'=>8*3600,
            'read_write_timeout'=>8*3600,
            'persistent'=>true
        ],
        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 0,
            'prefix' => menv('REDIS_PREFIX', ''),
            'timeout'=>8*3600,
            'read_timeout'=>8*3600,
            'read_write_timeout'=>8*3600,
            'persistent'=>true
        ],

    ],
5年前 评论
sushengbuhuo

@zsping1989 f学习了

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!