redis命名空间冲突
laravel中,出现 'Fatal error: Non-static method Redis::keys() cannot be called statically' 的问题分析:
1.这⾥不得不吐槽下。按理说,这个问题,是⼀个很容易发⽣的问题!⽹上各种搜索,很难明⽩是什么原因。
最多是⼀个 'redis命名空间冲突',让我们不要引⽤ 'Redis',⽽是
1.将 'config/app.php' 中的 Redis别名,修改为 'Redisxx',换⼀个不会冲突的
2.将项⽬中的 'use Redis;',改为 'Illuminate\Support\Facades\Redis' 反正就是指定全路径
这确实是正确的,但我之前的环境可以使⽤,现在的环境不可⽤,我不能将之前的代码中,所有的都进⾏替换啊,有点痛苦!
2.了很多⽂章,外加昨天正好总结了 "PHP的扩展安装" - blog.csdn/beyond__devil/article/details/65934701
pecl,pear,phpize,php-config 等,都了解了点(原谅我,现在居然才开始看这个,还⼲了3年PHP了。。。)
⼤概了解产⽣这个问题的原因了,分析如下:
1>我现在默认的集成环境中,系统已经安装了 redis,并且,系统的PHP,也已经安装了 'PhpRedis' 的 PECL扩展,也就是 redis.so // 它已经占据了 'Redis' 命名空间
2>laravel框架,⽂档中,也指出了,我们使⽤redis,需要安装 composer require predis/predis // 它也使⽤的是 'Redis' 命名空间
2者都是Redis扩展,使⽤了 Redis 命名空间,所以导致冲突!
3.了解了问题所在,我们就可进⾏修复:
1>就是上⾯所说的,修改通过 composer 安装的 predis 的命名空间。⼜分2种:
1)修改 'app/config.php',将 'Redis',改为 'RedisDB'。然后,每次引⽤Redis Facade时,使⽤ RedisDB 来替换
2)在每个使⽤ use Redis; 的⽂件中,我们改为 use Illuminate\Support\Facades\Redis;
2>我的服务器项⽬,只基于laravel,我在php配置⽂件中,注释掉 ';extension redis.so',不使⽤ pecl 安装的redis扩展,直接使⽤ composer 安装的redis扩展(也算推荐吧,以后
参考⽂章:
laravel/docs/5.4/redis // laravel "英⽂" 官⽅⽂档(中⽂翻译的之前的版本,有的信息没有)
1>官⽅⽂档中,有这么⼀句话:
Alternatively, you may install the PhpRedis PHP extension via PECL. The extension is more complex to install but may yield better performance for applications that ma 意思是:
你也可以通过PECL安装 PhpRedis 扩展。在⼤量使⽤ redis 的PHP应⽤中,使⽤ PECL 安装的redis.so扩展,会产⽣更⾼的性能(通过我上⾯的教程,应该了解到 pecl 扩展 2>接着官⽅的redis⽂档,直接红⾊的警告
/*
If you have the PhpRedis PHP extension installed via PECL, you will need to rename the Redis alias in your config/app.php configuration file.
*/
如果,使⽤了 pecl 安装的 redis.so,我们在 'config/app.php' 中,就需要重命名 'Redis' 别名。
3>如果,我们就想使⽤ pecl 安装的 'redis.so' (扩展名为:PhpRedis),我们需要配置:
config/database.php
'redis' => [
'client' => 'phpredis',
],
除了默认的host ,port, database和password配置,PhpRedis还⽀持 persistent, prefix, read_timeout, timeout。可在 'config/database.php' 中配置
总结:
官⽅⽂档,就已经解释了很清楚了,我居然不知道。。。
还是我这个问题,太低级了。。。 laravel中,出现 'Fatal error: Non-static method Redis::keys() cannot be called statically' 的问题分析:
1.这⾥不得不吐槽下。按理说,这个问题,是⼀个很容易发⽣的问题!⽹上各种搜索,很难明⽩是什么原因。
最多是⼀个 'redis命名空间冲突',让我们不要引⽤ 'Redis',⽽是
1.将 'config/app.php' 中的 Redis别名,修改为 'Redisxx',换⼀个不会冲突的
2.将项⽬中的 'use Redis;',改为 'Illuminate\Support\Facades\Redis' 反正就是指定全路径
这确实是正确的,但我之前的环境可以使⽤,现在的环境不可⽤,我不能将之前的代码中,所有的都进⾏替换啊,有点痛苦!
2.了很多⽂章,外加昨天正好总结了 "PHP的扩展安装" - blog.csdn/beyond__devil/article/details/65934701
pecl,pear,phpize,php-config 等,都了解了点(原谅我,现在居然才开始看这个,还⼲了3年PHP了。。。)
⼤概了解产⽣这个问题的原因了,分析如下:
1>我现在默认的集成环境中,系统已经安装了 redis,并且,系统的PHP,也已经安装了 'PhpRedis' 的 PECL扩展,也就是 redis.so // 它已经占据了 'Redis' 命名空间
2>laravel框架,⽂档中,也指出了,我们使⽤redis,需要安装 composer require predis/predis // 它也使⽤的是 'Redis' 命名空间
2者都是Redis扩展,使⽤了 Redis 命名空间,所以导致冲突!
3.了解了问题所在,我们就可进⾏修复:
1>就是上⾯所说的,修改通过 composer 安装的 predis 的命名空间。⼜分2种:
1)修改 'app/config.php',将 'Redis',改为 'RedisDB'。然后,每次引⽤Redis Facade时,使⽤ RedisDB 来替换
2)在每个使⽤ use Redis; 的⽂件中,我们改为 use Illuminate\Support\Facades\Redis;
2>我的服务器项⽬,只基于laravel,我在php配置⽂件中,注释掉 ';extension redis.so',不使⽤ pecl 安装的redis扩展,直接使⽤ composer 安装的redis扩展(也算推荐吧,以后
参考⽂章:
laravel/docs/5.4/redis // laravel "英⽂" 官⽅⽂档(中⽂翻译的之前的版本,有的信息没有)
1>官⽅⽂档中,有这么⼀句话:
国内php空间扩展
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论