一直報錯:laravel Non-static method Redis::hGet() cannot be called statically
如下圖所示
排查了原因如下
- 要麼用
predis
- 要麼用
phpredis
有什麼區別
先了解 PEAR
和 PECL
參考文章:blog.csdn.net/beyond__devil/articl...
PEAR
predis
屬於這種,是使用純 PHP 寫的
PHP 擴充套件與應用庫(the PHP Extension and Application Repository) 是一個 PHP 擴充套件及應用的程式碼倉庫,純粹由 PHP 程式碼編寫。就是別人幫我們用 PHP 寫了一些工具,影像處理、檔案上傳等,我們直接在我們專案中使用即可。
PEAR 是 PHP 的上層擴充套件,用 PHP 來寫的擴充套件
PECL
phpredis
屬於這種,是使用 C 寫的 PHP 擴充套件
PHP 擴充套件庫(PHP Extension Community Library) 提供了一系列已知的擴充套件庫,由 C、C++ 等其他語言編寫,以 ‘.so’ 形式出現。’.so’ 為共享庫,是 share object,用於動態連結。和 ‘dll’ 差不多,比 ‘PEAR’ 更快。(因為非 PHP 程式碼,需要在伺服器上配置並註冊到主機中)
PECL 是 PHP 的底層擴充套件,PHP 可能不支援的一些作業系統底層的功能,透過 C 寫個擴充套件,對 PHP 語言本身,進行了擴充
我選擇用
phpredis
:
- 程式碼是 clone 的,已有依賴包
predis/predis
。我想換phpredis
(有強迫症所以刪了這個依賴)- 安裝環境的時候我習慣先裝 Redis,所以和
predis/predis
衝突了
use Redis
和use Illuminate\Support\Facades\Redis
:
- 直接
use Redis
是呼叫 php redis 擴充套件 Redis 類(就是上面說的用 C 寫的 PHP 擴充套件),非 Larave 提供的Illuminate\Support\Facades\Redis
類;- 如果裝了這個 Redis 擴充套件,可以在
php.ini
中刪除 Redis 擴充套件的配置,然後再用use Redis
,此時使用的是Illuminate\Support\Facades\Redis
類了;
1. 先檢查 Redis 擴充套件已安裝
2. 移除 predis
# 強迫症,我移除 predis,只保留 phpredis
composer remove predis/predis
3. 編輯 .env
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
# REDIS_CLIENT=predis 修改為 REDIS_CLIENT=phpredis
REDIS_CLIENT=phpredis
4. 編輯 config/app.php
/**
* 其實刪不刪,改不改這行沒影響的,專案直接用 Illuminate\Support\Facades\Redis 這個類
*
* 主要是強迫症,我還是選擇刪掉這行
*
* 可以選擇更改別名為「RedisManager」留著備用,或者「其他任意名稱,如: RedisDB, RedisA ...」
*/
// 'Redis' => Illuminate\Support\Facades\Redis::class, # 找到這行
'RedisManager' => Illuminate\Support\Facades\Redis::class, # 修改後的
本作品採用《CC 協議》,轉載必須註明作者和本文連結