在 .env 中可以配置 REDIS_CLIENT 指定 Laravel 框架使用 phpredis 或 predis 来操作 Redis:

REDIS_CLIENT=phpredis
#或
REDIS_CLIENT=predis

phpredis 与 predis 区别:

 

原生 phpredis 的 set 方法并中把 nx、ex 结合在一起:

$redis = new \Redis();
$redis->set('key', 'value', ['NX', 'EX' => 10]);

原生  predis 的 set 方法并中把 nx、ex 结合在一起:

$redis = new \Predis\Client();
$redis->set('key', 'value', 'EX', 10, 'NX');

很明显,两个扩展提供的参数不一致!

 

但在 Laravel 框架中,可以直接使用:

use Illuminate\Support\Facades\Redis;

Redis::set('key', 'value', 'EX', 10, 'NX');

原理是 Illuminate\Redis\Connections\PhpRedisConnection 类对 set 方法进行了一次封装:

public function set($key, $value, $expireResolution = null, $expireTTL = null, $flag = null)
{
    return $this->command('set', [
        $key,
        $value,
        $expireResolution ? [$flag, $expireResolution => $expireTTL] : null,
    ]);
}

 

因此,在写项目时,我们应尽量使用 Laravel 门面提供的方法来操作,以消除不同扩展带来的差异。