2010-09-01 90 views

回答

7

不確定這是否受支持,但您絕對應該看看Predis和Rediska,這兩款(特別是Predis AFAIK)是最好的PHP Redis客戶端。

+0

謝謝你antirez,我從來沒有嘗試Predis之前,它似乎支持持久連接,我相信一個C實現爲php模塊應該加快速度,但我會嘗試一下並進行比較。 – secmask 2010-09-02 14:20:49

+0

關注Predis是否支持持續連接,因爲它是純粹的PHP實現,而不是基於C的擴展。 根據維護者的說法,如果您的PHP進程配置爲保持常駐,Predis確實支持持久連接。這是典型的嚴重生產PHP + Apache設置,雖然您的特定安裝可能會有所不同,可能需要一些配置。 [Predis FAQ](https://github.com/nrk/predis/blob/master/FAQ.markdown)指出,當Predis持久化並且PHP進程被回收用於請求時,連接是持久的。 – kevinlawler 2011-05-11 19:15:36

+0

免責聲明:我還沒有測試Predis。我首先嚐試C擴展,因爲Predis看起來是用非常冗長的風格構建的。我也不喜歡依賴於PHP的自動加載機制。 – kevinlawler 2011-05-11 19:22:03

-3

PHP-Redis支持持久性連接,因爲它使用C語言編寫的php擴展,這使得它可以在請求之間共享連接。看看popen and pconnect的文檔。

Predis 不能支持持久性連接,因爲它是100%PHP和PHP之間不分享任何請求。

+1

據Predis作者說,這個答案是不正確的。他聲稱,當PHP進程被配置爲在請求之間保持駐留時,PHP請求可以共享信息,就像許多實現一樣。 – kevinlawler 2011-05-11 19:26:20

+1

同意,這個答案是錯誤的。無論如何,'popen()'是錯誤的資源類型(p ==管道進程)。 'pconnect()'完全有能力支持Zend內部的「xport」資源處理,它允許持久連接被維護。 Predis本身使用[stream_socket_client()](http://php.net/stream_socket_client),並帶有一個可選的STREAM_CLIENT_PERSISTENT標誌。當PHP進程由類似Apache的後端進程/線程池維護時,這些持久連接在後端的生命週期內存活。 – Joe 2011-11-21 23:13:20

0

Predis支持持久連接使用它PhpiredisStreamConnection以來v0.8.0的persistent=1旗標語:

<?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添加了persistant = 1,看起來我終究還是得到了相同的TIME_WAIT套接字。 – 2014-06-11 14:31:59

2

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

是(每9.6毫秒VS 0.83毫秒連接)比connect()快約10倍:

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版本。)

0

Predis支持持續連接。你只需要添加持久paramater爲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