遇到 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 有代理的话,别忘了把这个配置删掉。
database是指存在redis 的第几个数据库。如果只有一个当然没问题。但是如果有多个redis库。你这里删除掉后果.....
@王东哲 如果 redis 用了代理的话,predis 会发送 select 命令,这里直接就会报错,所以用了代理就没办法用多数据库了
修改连接配置
'client' => 'phpredis'
'persistent'=>true
@zsping1989 f学习了