есть ли php redis клиент, поддерживающий постоянное соединение? - PullRequest
9 голосов
/ 01 сентября 2010

В качестве заголовка я ищу php-клиент Redis, который поддерживает постоянное соединение, потому что мое веб-приложение получает много запросов (каждый запрос помещает элемент в очередь Redis), и я хочу избежатьсоздавать новое соединение каждый запрос.

Ответы [ 5 ]

7 голосов
/ 02 сентября 2010

Не уверен, что это поддерживается, но вы обязательно должны взглянуть на Predis и Rediska, эти два (особенно Predis AFAIK) являются лучшими доступными клиентами PHP Redis.

3 голосов
/ 19 сентября 2016

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

примерно в 10 раз быстрее (9,6 мс против 0,83 мс на соединение), чем connect():

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

Примечание: «Эта функция недоступна в резьбовых версиях».(Я использую IIS в Windows, поэтому запускаю версию NTS.)

0 голосов
/ 24 июля 2017

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

вы можете найти больше параметров для соединенияздесь: https://github.com/nrk/predis/wiki/Connection-Parameters

0 голосов
/ 24 февраля 2014

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',
    ),
);
0 голосов
/ 28 января 2011

PHP-Redis поддерживает постоянные соединения, так как он использует расширение php, написанное на C, которое дает ему механизм для обмена соединениями между запросами.Посмотрите документацию по popen и pconnect .

Predis не может поддерживать постоянные соединения, поскольку это 100% PHP, а PHP ничего не разделяет между каждым запросом.

...