2010-09-01 10 views

cevap

7

emin değil bu desteklenir ama kesinlikle bu iki (özellikle PREDIS AFAIK) en iyi PHP Redis istemcileri mevcuttur, PREDIS ve Rediska bakmak gerekir eğer.

+0

teşekkürler antirez, Predis'i daha önce hiç denemedim, kalıcı bağlantıyı destekliyor gibi görünüyor, php-modülü olarak bir C uygulamasının Daha hızlı ol, ama onları deneyeceğim ve bir karşılaştırma yapacağım. – secmask

+0

Sorun, Predis'in tamamen bir PHP uygulaması olduğundan ve C tabanlı bir uzantı olmadığı için kalıcı bağlantıları destekleyip desteklemediğidir. Sürdürücüye göre Predis, PHP işlemleriniz yerleşik kalmak üzere yapılandırıldıysa kalıcı bağlantıları destekliyor. Bu, kurulumunuz değişebilir ve bazı yapılandırma gerektirebilse de, ciddi bir üretim PHP + Apache kurulumunda tipiktir. [PREDIS SSS] (https://github.com/nrk/predis/blob/master/FAQ.markdown) PREDIS kalıcıdır ve PHP işlemleri istekleri için geri döndürülmeleri durumunda bağlantıların kalıcı olduğuna işaret etmektedir. – kevinlawler

+0

Yasal Uyarı: Henüz Predis'i test etmedim. Predis çok ayrıntılı bir stil kullanılarak inşa edilmiş görünüyor beri ilk C uzantısı çalışıyorum. Ayrıca PHP'nin otomatik yükleme mekanizmalarına güvenmekten hoşlanmıyorum. – kevinlawler

-3

PHP Redis o bunu istekleri arasındaki bağlantıları paylaşmak için bir mekanizma sağlar C dilinde yazılmış bir php uzantısını kullanan beri kalıcı bağlantıları destekler. popen and pconnect'daki belgelere bakın.

PREDIS olamaz destek kalıcı bağlantılar% 100 PHP ve her isteği arasında PHP hisseleri şey değildir çünkü.

+1

göre çok daha hızlıdır Predis yazarına göre, bu cevap yanlıştır. PHP süreçleri, birçok uygulamada olduğu gibi, talepler arasında ikamet etmek için yapılandırıldığında PHP taleplerinin bilgi paylaşabileceğini iddia etmektedir. – kevinlawler

+1

Kabul edildi, bu cevap yanlış. 'popen()' zaten yanlış kaynak türüdür (p == piped process). pconnect(), kalıcı bağlantıların korunmasını sağlayan Zend'in dahili "xport" kaynak işlemesini tamamen destekleyebilir. Predis, isteğe bağlı bir "STREAM_CLIENT_PERSISTENT" bayrağıyla [stream_socket_client()] (http://php.net/stream_socket_client) kullanır. PHP süreci, Apache gibi bir arka plan işlemleri/iş parçacığı havuzu ile sürdürüldüğünde, bu kalıcı bağlantılar arka ucun ömrü içinde hayatta kalır. – Joe

0

PREDIS o v0.8.0 beri persistent=1 bayrak sözdizimi ile PhpiredisStreamConnection var kullanarak kalıcı bağlantıları destekler:

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

PhpiredisStreamConnection ile persistant = 1 ekledim ve hala aynı TIME_WAIT yuvasına sahip olduğumu görüyorum. –

2

PhpRedis halen kalıcı bağlantıları destekler.

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

Not:

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

yaklaşık 10 kat daha hızlı connect() daha (msn 9.6 0,83 vs msn bağlantı başına) 'dir: Böyle pconnect() ile sürekli bir bağlantı yapma, PHP 7.0 ve PhpRedis 3.0 kullanma " Bu özellik dişli sürümlerde mevcut değildir ". (Windows üzerinde IIS altında çalışan, o yüzden NTS sürümünü çalıştırın.)

0

PREDIS kalıcı bağlantı destekler. https://github.com/nrk/predis/wiki/Connection-Parameters

: sen sadece burada bağlantı için daha fazla parametre bulabilirsiniz yerine

$client = new Predis\Client('tcp://127.0.0.1:6379?database=15'); 

ait

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

aşağıdaki kodu kullanabilirsiniz 1.

gibi kalıcı parametrenin yeni eklemem gerekiyor