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

时间:2010-09-01 03:58:05

标签: php redis persistent

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

5 个答案:

答案 0 :(得分:7)

不确定是否支持此功能,但您一定要看看Predis和Rediska,这两个(特别是Predis AFAIK)是最好的PHP Redis客户端。

答案 1 :(得分:3)

PhpRedis目前支持持久连接。使用PHP 7.0和PhpRedis 3.0,与pconnect()建立持久连接,如下所示:

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);
}

connect()快10倍(9.6毫秒对每个连接0.83毫秒):

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

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

答案 2 :(得分:0)

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

<?php
$client = new Predis\Client('tcp://127.0.0.1?persistent=1', array(
    'connections' => array(
        'tcp'  => 'Predis\Connection\PhpiredisStreamConnection',
        'unix' => 'Predis\Connection\PhpiredisStreamConnection',
    ),
);

答案 3 :(得分:0)

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

您可以使用以下代码

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {

    if error != nil {
        print("Error on updating value on characteristic: \(characteristic) - \(error!.localizedDescription))")
        return
    }
    guard let data = characteristic.value else {
        print("characteristic.value is nil")
        return
    }
    let uuidStr = characteristic.uuid.uuidString
    let stringFromData: String
    switch uuidStr {
    case "FFF2":
        //I do not know the UUID: FFF2, but seems you prefer it in hexadecimal
        stringFromData = String(format: "%02X", data[0])
    //Add other `case`s for other `uuid`s you want to show...
    //case "XXXX":
    //    stringFromData = ...
    //...
    default:
        stringFromData = "Unsupported UUID: \(uuidStr), data:\(data as NSData)"
    }
    print(stringFromData)
}

而不是

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

您可以在此处找到更多连接参数:  https://github.com/nrk/predis/wiki/Connection-Parameters

答案 4 :(得分:-3)

PHP-Redis支持持久连接,因为它使用用C编写的php扩展,为它提供了一种在请求之间共享连接的机制。查看popen and pconnect上的文档。

Predis 不能支持持久连接,因为它是100%PHP和PHP在每个请求之间不共享。