我看文档里面,那个predis 和 redis 有什么区别?

看文档有些不明白地方,predis 设置 aliases,不要与 redis重复

'Redis' => Illuminate\Support\Facades\Redis::class,
'RedisManager' => Illuminate\Support\Facades\Redis::class,

两者有什么区别吗?用法好像都一样的

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

phpredis是用C写的原生扩展,需要通过pecl安装,或者自己手动编译源码,然后修改php.ini文件加载此扩展。

predis是用php写的composer软件包,直接composer安装。

相同点就是都可以完成与Redis的通信和增删改查操作,并且两个都占用相同的\Redis完全限定名称

不同点就是一个是C写的原生扩展,一个是php写的软件包。

不能重复的那个问题,就是上面提到的字体加粗部分。如果你的php环境安装了phpredis原生扩展和predis软件包都安装了,那么在你的config/database.phpredis.client就需要改为phpredis,这样在框架中调用\Redis类的时使用的是原生扩展。此时若你改为predis,那么框架在加载时,会加载predis的相关的变量定义,这其中就包括定义\Redis命名空间。但因为\Redis命名空间早已被原生扩展占用,导致系统报错。

如果在已安装phpredis原生扩展的环境中一定要用predis的话,解决办法就是改config/app.phpaliases数组里的Redis建名。或者自己 手动实例化一个predis实例出来用:

$predis = new \Illuminate\Redis\RedisManager(app(), 'predis', config('database.redis'));
3年前 评论
donggan (楼主) 3年前
LiamHao (作者) 3年前
小李世界 3年前
讨论数量: 3

phpredis是用C写的原生扩展,需要通过pecl安装,或者自己手动编译源码,然后修改php.ini文件加载此扩展。

predis是用php写的composer软件包,直接composer安装。

相同点就是都可以完成与Redis的通信和增删改查操作,并且两个都占用相同的\Redis完全限定名称

不同点就是一个是C写的原生扩展,一个是php写的软件包。

不能重复的那个问题,就是上面提到的字体加粗部分。如果你的php环境安装了phpredis原生扩展和predis软件包都安装了,那么在你的config/database.phpredis.client就需要改为phpredis,这样在框架中调用\Redis类的时使用的是原生扩展。此时若你改为predis,那么框架在加载时,会加载predis的相关的变量定义,这其中就包括定义\Redis命名空间。但因为\Redis命名空间早已被原生扩展占用,导致系统报错。

如果在已安装phpredis原生扩展的环境中一定要用predis的话,解决办法就是改config/app.phpaliases数组里的Redis建名。或者自己 手动实例化一个predis实例出来用:

$predis = new \Illuminate\Redis\RedisManager(app(), 'predis', config('database.redis'));
3年前 评论
donggan (楼主) 3年前
LiamHao (作者) 3年前
小李世界 3年前

phpredis是用C写的原生扩展,需要通过pecl安装,或者自己手动编译源码,然后修改php.ini文件加载此扩展。

predis是用php写的composer软件包,直接composer安装。

相同点就是都可以完成与Redis的通信和增删改查操作,并且两个都占用相同的\Redis完全限定名称

不同点就是一个是C写的原生扩展,一个是php写的软件包。

不能重复的那个问题,就是上面提到的字体加粗部分。如果你的php环境安装了phpredis原生扩展和predis软件包都安装了,那么在你的config/database.phpredis.client就需要改为phpredis,这样在框架中调用\Redis类的时使用的是原生扩展。此时若你改为predis,那么框架在加载时,会加载predis的相关的变量定义,这其中就包括定义\Redis命名空间。但因为\Redis命名空间早已被原生扩展占用,导致系统报错。

如果在已安装phpredis原生扩展的环境中一定要用predis的话,解决办法就是改config/app.phpaliases数组里的Redis建名。或者自己 手动实例化一个predis实例出来用:

$predis = new \Illuminate\Redis\RedisManager(app(), 'predis', config('database.redis'));
3年前 评论
donggan (楼主) 3年前
LiamHao (作者) 3年前
小李世界 3年前

用法是一样的,因为laravel优秀的设计理念,让外部api和内部实现解耦了,我们使用的是门面,而内部实现可以使用不同的驱动器,所以对于调用者,切换驱动是无感知的。

说下这2个驱动的区别吧,php_redis是php的一个扩展,用c实现的,性能稍微比较高,但使用需要安装php_redis扩展。

predis是直接使用php的socket实现的redis驱动,好处是安装使用非常便捷,composer引入就可使用,无需php_redis扩展的支持。

3年前 评论

帮忙问下,这地方我还是不是很明白,
我现在是 php_study,php 默认安装了 phpredis,然后我看文档就安装了 predis,
根据文档,我就在 app.php 中设了两个 aliases,
我的想法是 让 Redis 对应 phpredis,RedisManage 对应 predis
'Redis' => Illuminate\Support\Facades\Redis::class,
'RedisManager' => Illuminate\Support\Facades\Redis::class,
在 database.php 中,设为 predis,'client' => env ('REDIS_CLIENT', 'predis'),
然后我在一个控制器中尝试用 RedisManage,
use Illuminate\Redis\RedisManager;// 系统 自动加了这句
RedisManager::set ('key','nihao');
然后就给我报一个 Call to undefined method Illuminate\Redis\RedisManager::set ()

3年前 评论
LiamHao 2年前
LiamHao 3年前
donggan (作者) (楼主) 3年前
LiamHao 3年前
donggan (作者) (楼主) 3年前
LiamHao 3年前
忆往昔弹指间 3年前
xiaohuasheng 3年前
donggan (作者) (楼主) 2年前
LiamHao 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!