laravel中醉鳖,出現(xiàn) 'Fatal error: Non-static method Redis::keys() cannot be called statically' 的問題分析:
1.這里不得不吐槽下惕橙。按理說,這個問題蛾魄,是一個很容易發(fā)生的問題!網(wǎng)上各種搜索憋他,很難明白是什么原因释牺。
最多是一個 'redis命名空間沖突',讓我們不要引用 'Redis'微服,而是
1.將 'config/app.php' 中的 Redis別名趾疚,修改為 'Redisxx',換一個不會沖突的
2.將項目中的 'use Redis;'职辨,改為 'Illuminate\Support\Facades\Redis' 反正就是指定全路徑
這確實是正確的盗蟆,但我之前的環(huán)境可以使用戈二,現(xiàn)在的環(huán)境不可用舒裤,我不能將之前的代碼中,所有的都進(jìn)行替換啊觉吭,有點痛苦腾供!
2.找了很多文章,外加昨天正好總結(jié)了 "PHP的擴(kuò)展安裝" - http://blog.csdn.net/beyond__devil/article/details/65934701
pecl,pear伴鳖,phpize节值,php-config 等,都了解了點(原諒我榜聂,現(xiàn)在居然才開始看這個搞疗,還干了3年P(guān)HP了。须肆。匿乃。)
大概了解產(chǎn)生這個問題的原因了,分析如下:
1>我現(xiàn)在默認(rèn)的集成環(huán)境中豌汇,系統(tǒng)已經(jīng)安裝了 redis幢炸,并且,系統(tǒng)的PHP拒贱,也已經(jīng)安裝了 'PhpRedis' 的 PECL擴(kuò)展宛徊,也就是 redis.so // 它已經(jīng)占據(jù)了 'Redis' 命名空間
2>laravel框架,文檔中逻澳,也指出了闸天,我們使用redis,需要安裝 composer require predis/predis // 它也使用的是 'Redis' 命名空間
2者都是Redis擴(kuò)展斜做,使用了 Redis 命名空間号枕,所以導(dǎo)致沖突!
3.了解了問題所在陨享,我們就可進(jìn)行修復(fù):
1>就是上面所說的葱淳,修改通過 composer 安裝的 predis 的命名空間。又分2種:
1)修改 'app/config.php'抛姑,將 'Redis'赞厕,改為 'RedisDB'。然后定硝,每次引用Redis Facade時皿桑,使用 RedisDB 來替換
2)在每個使用 use Redis; 的文件中,我們改為 use Illuminate\Support\Facades\Redis;
2>我的服務(wù)器項目蔬啡,只基于laravel诲侮,我在php配置文件中,注釋掉 ';extension redis.so'箱蟆,不使用 pecl 安裝的redis擴(kuò)展沟绪,直接使用 composer 安裝的redis擴(kuò)展(也算推薦吧,以后我們得熟悉 composer 來搭建php應(yīng)用)
參考文章:
https://laravel.com/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 make heavy use of Redis.
意思是:
你也可以通過PECL安裝 PhpRedis 擴(kuò)展恨旱。在大量使用 redis 的PHP應(yīng)用中,使用 PECL 安裝的redis.so擴(kuò)展坝疼,會產(chǎn)生更高的性能(通過我上面的教程搜贤,應(yīng)該了解到 pecl 擴(kuò)展,是使用 c钝凶、c++等開發(fā)的)仪芒,但是就是安裝稍微復(fù)雜點
2>接著官方的redis文檔,直接紅色的警告8荨W懒颉!啃炸!
/*
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' (擴(kuò)展名為:PhpRedis)裹虫,我們需要配置:
config/database.php
'redis' => [
'client' => 'phpredis',
],
除了默認(rèn)的host ,port, database和password配置肿嘲,PhpRedis還支持 persistent, prefix, read_timeout, timeout≈可在 'config/database.php' 中配置
總結(jié):
官方文檔雳窟,就已經(jīng)解釋了很清楚了,我居然不知道匣屡。封救。。
還是我這個問題捣作,太低級了誉结。。券躁。 laravel中惩坑,出現(xiàn) 'Fatal error: Non-static method Redis::keys() cannot be called statically' 的問題分析:
1.這里不得不吐槽下。按理說也拜,這個問題以舒,是一個很容易發(fā)生的問題!網(wǎng)上各種搜索慢哈,很難明白是什么原因蔓钟。
最多是一個 'redis命名空間沖突',讓我們不要引用 'Redis'岸军,而是
1.將 'config/app.php' 中的 Redis別名奋刽,修改為 'Redisxx',換一個不會沖突的
2.將項目中的 'use Redis;'艰赞,改為 'Illuminate\Support\Facades\Redis' 反正就是指定全路徑
這確實是正確的佣谐,但我之前的環(huán)境可以使用,現(xiàn)在的環(huán)境不可用方妖,我不能將之前的代碼中狭魂,所有的都進(jìn)行替換啊,有點痛苦党觅!
2.找了很多文章雌澄,外加昨天正好總結(jié)了 "PHP的擴(kuò)展安裝" - http://blog.csdn.net/beyond__devil/article/details/65934701
pecl,pear杯瞻,phpize镐牺,php-config 等,都了解了點(原諒我魁莉,現(xiàn)在居然才開始看這個睬涧,還干了3年P(guān)HP了。旗唁。畦浓。)
大概了解產(chǎn)生這個問題的原因了,分析如下:
1>我現(xiàn)在默認(rèn)的集成環(huán)境中检疫,系統(tǒng)已經(jīng)安裝了 redis讶请,并且,系統(tǒng)的PHP屎媳,也已經(jīng)安裝了 'PhpRedis' 的 PECL擴(kuò)展夺溢,也就是 redis.so // 它已經(jīng)占據(jù)了 'Redis' 命名空間
2>laravel框架,文檔中烛谊,也指出了企垦,我們使用redis,需要安裝 composer require predis/predis // 它也使用的是 'Redis' 命名空間
2者都是Redis擴(kuò)展晒来,使用了 Redis 命名空間钞诡,所以導(dǎo)致沖突!
3.了解了問題所在湃崩,我們就可進(jìn)行修復(fù):
1>就是上面所說的荧降,修改通過 composer 安裝的 predis 的命名空間。又分2種:
1)修改 'app/config.php'攒读,將 'Redis'朵诫,改為 'RedisDB'。然后薄扁,每次引用Redis Facade時剪返,使用 RedisDB 來替換
2)在每個使用 use Redis; 的文件中废累,我們改為 use Illuminate\Support\Facades\Redis;
2>我的服務(wù)器項目,只基于laravel脱盲,我在php配置文件中邑滨,注釋掉 ';extension redis.so',不使用 pecl 安裝的redis擴(kuò)展钱反,直接使用 composer 安裝的redis擴(kuò)展(也算推薦吧掖看,以后我們得熟悉 composer 來搭建php應(yīng)用)
參考文章:
https://laravel.com/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 make heavy use of Redis.
意思是:
你也可以通過PECL安裝 PhpRedis 擴(kuò)展哎壳。在大量使用 redis 的PHP應(yīng)用中,使用 PECL 安裝的redis.so擴(kuò)展尚卫,會產(chǎn)生更高的性能(通過我上面的教程归榕,應(yīng)該了解到 pecl 擴(kuò)展,是使用 c吱涉、c++等開發(fā)的)蹲坷,但是就是安裝稍微復(fù)雜點
2>接著官方的redis文檔,直接紅色的警告R仂Q!疙咸!
/*
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' (擴(kuò)展名為:PhpRedis)题山,我們需要配置:
config/database.php
'redis' => [
'client' => 'phpredis',
],
除了默認(rèn)的host ,port, database和password配置兰粉,PhpRedis還支持 persistent, prefix, read_timeout, timeout《ネ可在 'config/database.php' 中配置
總結(jié):
官方文檔玖姑,就已經(jīng)解釋了很清楚了,我居然不知道慨菱。焰络。。
還是我這個問題符喝,太低級了闪彼。。协饲。