predis包和phpredis扩展的区别是什么

predis好神奇啊,居然不用扩展就可以直接连接redis,他底层是用什么实现的?(我看了一下他的源代码,根本看不懂啊),听说phpredis是扩展实现所以性能比predis更高吗?

但是Laravel官方却推荐的是predis,请问一下他们之间的区别是什么?性能差距大不大?

阅读 19.5k
4 个回答

redis官方推荐的php客户端是predis和phpredis。前者是完全使用php代码实现的原生客户端,后者则是用c编写的php拓展。在功能上二者区别不大,就性能而言后者更胜一筹。

虽然predis的性能逊于phpredis,但除非执行大量的redis命令,否则很难区分二者的性能。而且实际应用中执行redis的命令的开销更多在网络传输上,单纯注重客户端的性能的意义不大。

——摘自《redis入门指南》第五章

如果你关注过国人开发的SSDB,那你应该会发现SSDB官方提供的PHP客户端也是用PHP实现的:

https://github.com/ideawu/ssdb/blob/master/api/php/SSDB.php
$this->sock = @stream_socket_client("$host:$port", $errno, $errstr, $timeout_f);

同理,predis也是一个用PHP实现的Redis客户端:

https://github.com/nrk/predis/blob/v1.1/src/Connection/StreamConnection.php
$resource = @stream_socket_client($address, $errno, $errstr, $timeout, $flags)

PHP自身也是支持socket编程的,你可以看下:

http://php.net/manual/zh/ref.sockets.php
http://php.net/manual/zh/ref.stream.php
http://pecl.php.net/package/swoole

C实现的客户端phpredis有个好处是能实现PHP-FPM到Redis的持久连接,这时PHP实现的predis比不了的,不过PHP实现的predis好处是只依赖PHP解释器,依赖性更小,部署更方便,轻松就能兼容PHP7.

predis,是PHP版本写的redis client,采用socket连接
php extension redis是PHP原生扩展,C写的

由于没有进行过大数据压测,不能准确告诉你性能差异。但基本上扩展redis肯定比predis更好。
Laravel推荐用predis,主要是当心一些主机没有支持redis吧。尽量少依赖C扩展,这样才能发挥PHP普及众生的思想。

phpredis 底层是c 而且是官方扩展
而predis是用php写的
安装道理讲 从性能上phpredis更好!
官方提供的PHP客户端列表如下:
图片描述

官方提供的PHP客户端列表如下:

推荐问题
宣传栏