最近在Laravel项目中需要用到Redis,于是安装之。
本以为先安装好Redis Server端,再按照Laravel手册用composer安装predis/predis包,最后在.env里修改REDIS相关配置就可以使用了,没想到访问直接报错了:
LogicException
Please make sure the PHP Redis extension is installed and enabled.
用phpinfo()打印信息,发现确实没有redis驱动,于是准备安装驱动。
php的redis驱动扩展官方包不提供,需要自己安装。
于是去百度了一下,安装方法五花八门,有下载源码手动编译安装的,有用pecl安装的,看的我顿时就蒙了。我只是想用一下Redis啊,为什么会这么复杂!记得以前使用时只需要composer安装predis就可以了啊,为什么现在就不行了呢?
带着这个问题,又去百度一通,终于弄明白了。
php连接redis常用的有两种驱动,phpredis和predis。
phpredis是以php扩展方式安装的,安装步骤比较繁琐,执行效率稍高。
predis是用php代码写的,安装非常简单,执行效率稍差。
这两种驱动对应的实例化代码如下:
$redis = new Redis(); //phpredis
$redis = new \Predis\Client(); //predis
这下明白了,这两种驱动使用一种就可以了,没必要都安装。
那么问题来了,怎么指定使用哪种驱动呢?
查看config/database.php配置文件发现有如下配置项:
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
phpredis!怎么这么眼熟,这不就是上面提到的两种驱动中的一种吗,于是在.env里添加一条配置:
REDIS_CLIENT=predis
然后访问页面,一切正常!启动队列消费,也正常。至此,问题解决了。
Redis是非常轻量级的应用,一般都在局域网内使用,传输带宽不是问题。它的作者为此设计了一个足够轻量的通信协议RESP(Redis Serialization Protocol),这是一种纯文本的协议,非常直观,所以用php代码能够很容易地实现此驱动。
在大多数情况下,使用predis驱动就足够了,执行效率真的感觉不到差别,除非应用重度使用redis。