2010-09-01 57 views

Trả lời

7

Không chắc chắn nếu điều này được hỗ trợ nhưng bạn chắc chắn nên nhìn vào Predis và Rediska, hai điều này (đặc biệt là Predis AFAIK) là khách hàng PHP Redis tốt nhất hiện có.

+0

cảm ơn bạn antirez, tôi đã không bao giờ cố gắng Predis trước, nó có vẻ hỗ trợ kết nối liên tục, tôi tin rằng một C thực hiện như php-module nên nhanh hơn, nhưng tôi sẽ thử chúng và so sánh. – secmask

+0

Mối quan tâm là liệu Predis có hỗ trợ các kết nối liên tục vì nó là một triển khai thuần túy của PHP chứ không phải là phần mở rộng dựa trên C. Theo người bảo trì, Predis hỗ trợ các kết nối liên tục nếu các quy trình PHP của bạn được định cấu hình để ở lại thường trú. Điều này là điển hình đối với một thiết lập PHP + Apache sản xuất nghiêm trọng, mặc dù cài đặt cụ thể của bạn có thể thay đổi và có thể yêu cầu một số cấu hình. [Câu hỏi thường gặp về Predis] (https://github.com/nrk/predis/blob/master/FAQ.markdown) chỉ ra rằng các kết nối liên tục khi Predis liên tục và các quy trình PHP được tái chế cho các yêu cầu. – kevinlawler

+0

Tuyên bố từ chối trách nhiệm: Tôi chưa thử nghiệm Predis. Tôi đang thử phần mở rộng C đầu tiên kể từ khi Predis trông được xây dựng bằng cách sử dụng một phong cách rất tiết. Tôi cũng không thích dựa vào cơ chế tự động tải của PHP. – kevinlawler

-3

PHP-Redis hỗ trợ kết nối liên tục vì nó sử dụng phần mở rộng php được viết bằng C, cho phép cơ chế chia sẻ kết nối giữa các yêu cầu. Xem tài liệu trên popen and pconnect.

Predis không thể hỗ trợ kết nối liên tục vì nó là 100% PHP và PHP không chia sẻ gì giữa mỗi yêu cầu.

+1

Theo tác giả của Predis, câu trả lời này là không chính xác. Ông tuyên bố rằng các yêu cầu PHP có thể chia sẻ thông tin khi các tiến trình PHP được cấu hình để duy trì sự tồn tại giữa các yêu cầu, như là trường hợp với nhiều triển khai. – kevinlawler

+1

Đồng ý, câu trả lời này là sai. 'popen()' là loại tài nguyên không đúng (p == quá trình đường ống). 'pconnect()' hoàn toàn có khả năng hỗ trợ xử lý tài nguyên "xport" nội bộ của Zend cho phép duy trì các kết nối liên tục. Bản thân Predis sử dụng [stream_socket_client()] (http://php.net/stream_socket_client), với cờ 'STREAM_CLIENT_PERSISTENT' tùy chọn. Khi quá trình PHP được duy trì bởi một cái gì đó giống như Apache với một nhóm các tiến trình/chủ đề phụ trợ, những kết nối liên tục tồn tại trong vòng đời của chương trình phụ trợ. – Joe

0

Predis hỗ trợ kết nối liên tục sử dụng nó PhpiredisStreamConnection với cú pháp persistent=1 cờ từ 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

Tôi đã thêm persistant = 1 với PhpiredisStreamConnection và có vẻ như tôi vẫn nhận được cùng một socket TIME_WAIT sau khi tất cả. –

2

PhpRedis hiện hỗ trợ kết nối liên tục. Sử dụng PHP 7.0 và PhpRedis 3.0, thực hiện kết nối liên tục với pconnect() như thế này:

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

là khoảng 10 lần nhanh hơn (9.6 msec vs 0.83 msec mỗi kết nối) so với 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); 
} 

Lưu ý: " Tính năng này không khả dụng trong các phiên bản luồng ". (Tôi đang chạy dưới IIS trên Windows, vì vậy tôi chạy phiên bản NTS.)

0

Predis hỗ trợ kết nối liên tục. bạn chỉ cần thêm paramater dai dẳng như 1.

bạn có thể sử dụng mã dưới đây

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

thay vì

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

bạn có thể tìm thêm các thông số cho kết nối ở đây: https://github.com/nrk/predis/wiki/Connection-Parameters

Các vấn đề liên quan