遇到 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 有代理的话,别忘了把这个配置删掉。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 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年前 评论

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