Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有php redis客户端支持持久连接?_Php_Redis_Persistent - Fatal编程技术网

是否有php redis客户端支持持久连接?

是否有php redis客户端支持持久连接?,php,redis,persistent,Php,Redis,Persistent,作为标题,我正在寻找一个支持持久连接的php Redis客户端,因为我的web应用程序会收到很多请求(每个请求都会将一个项目放入Redis队列),我希望避免在每个请求都创建新的连接。不确定是否支持这一点,但您肯定应该看看Predis和Rediska,这两个(尤其是Predis AFAIK)是最好的PHP Redis客户端。PHP Redis支持持久连接,因为它使用了用C编写的PHP扩展,这为它提供了一种在请求之间共享连接的机制。请参阅上的文档 Predis无法支持持久连接,因为它是100%PHP

作为标题,我正在寻找一个支持持久连接的php Redis客户端,因为我的web应用程序会收到很多请求(每个请求都会将一个项目放入Redis队列),我希望避免在每个请求都创建新的连接。

不确定是否支持这一点,但您肯定应该看看Predis和Rediska,这两个(尤其是Predis AFAIK)是最好的PHP Redis客户端。

PHP Redis支持持久连接,因为它使用了用C编写的PHP扩展,这为它提供了一种在请求之间共享连接的机制。请参阅上的文档


Predis无法支持持久连接,因为它是100%PHP,并且PHP在每个请求之间不共享任何内容。

Predis支持持久连接,使用它的
PhpiredisStreamConnection
persistent=1
标志语法,从v0.8.0开始:

<?php
$client = new Predis\Client('tcp://127.0.0.1?persistent=1', array(
    'connections' => array(
        'tcp'  => 'Predis\Connection\PhpiredisStreamConnection',
        'unix' => 'Predis\Connection\PhpiredisStreamConnection',
    ),
);
目前支持持久连接。使用PHP7.0和PhpRedis 3.0,与以下内容建立持久连接:

for ($i=0;$i<1000;$i++) {
    $redis = new Redis();
    $result = $redis->pconnect('127.0.0.1'); 
    $redis->set("iterator",$i);
    $response=$redis->get("iterator");
    $redis->close();
    unset($redis);
}

注意:“此功能在线程版本中不可用”。(我在Windows上的IIS下运行,所以我运行NTS版本。)

Predis支持持久连接。您只需将持久参数添加为1

您可以使用下面的代码

$client = new Predis\Client(array(
   'scheme'    => 'tcp',
   'host'      => '127.0.0.1',
   'port'      => 6379,
   'database'  => 15,
   'persistent'=> 1
));
而不是

$client = new Predis\Client('tcp://127.0.0.1:6379?database=15');
您可以在此处找到连接的更多参数:

谢谢你,安提雷斯,我以前从未尝试过Predis,它似乎支持持久连接,我认为作为php模块的C实现应该更快,但我会尝试一下并进行比较。问题是Predis是否支持持久连接,因为它是纯php实现,而不是基于C的扩展aintainer,如果您的PHP进程被配置为驻留,Predis确实支持持久连接。这在严重的生产PHP+Apache设置中是典型的,尽管您的特定安装可能会有所不同,并且可能需要一些配置。文章指出,当Predis是持久的,并且PHP进程被回收时,连接是持久的对于请求。免责声明:我还没有测试Predis。我首先尝试C扩展,因为Predis看起来是使用非常详细的样式构建的。我也不喜欢依赖PHP的自动加载机制。据称,phpredis比Predis快得多。根据Predis作者的说法,这个答案是不正确的。他声称PHP请求可能当PHP进程被配置为驻留在请求之间时共享信息,就像许多实现一样。同意,这个答案是错误的。
popen()
无论如何是错误的资源类型(p==管道化进程)。
pconnect()
完全能够支持Zend的内部“xport”允许维护持久连接的资源处理。Predis本身使用,带有可选的
STREAM\u CLIENT\u persistent
标志。当PHP进程由Apache之类的后端进程/线程池维护时,这些持久连接在后端的生存期内仍然有效。我添加了persistant=1,使用PhpiredisStreamConnection,看起来我还是得到了相同的TIME\u WAIT套接字。
$client = new Predis\Client('tcp://127.0.0.1:6379?database=15');