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

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

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

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

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《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建名。

1周前 评论
donggan (楼主) 1周前
LiamHao (作者) 1周前
小李世界 1周前
讨论数量: 3

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

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

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

1周前 评论

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建名。

1周前 评论
donggan (楼主) 1周前
LiamHao (作者) 1周前
小李世界 1周前

帮忙问下,这地方我还是不是很明白,
我现在是 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 ()

1周前 评论
LiamHao 1周前
donggan (作者) (楼主) 1周前
LiamHao 1周前
donggan (作者) (楼主) 1周前
LiamHao 1周前
忆往昔弹指间 1周前
xiaohuasheng 6天前

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