- 本文地址: https://www.yangdx.com/2023/06/240.html
- 转载请注明出处
在 .env 中可以配置 REDIS_CLIENT 指定 Laravel 框架使用 phpredis 或 predis 来操作 Redis:
REDIS_CLIENT=phpredis
#或
REDIS_CLIENT=predis
phpredis 与 predis 区别:
- phpredis,它是用 c 语言写的 php 的高效扩展:https://github.com/phpredis/phpredis
- predis,它是用纯 php 代码写的,也用的蛮多的:https://github.com/predis/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 门面提供的方法来操作,以消除不同扩展带来的差异。
快来评论一下吧!
发表评论