Như tiêu đề, tôi đang tìm một ứng dụng khách Redis php hỗ trợ kết nối liên tục, vì ứng dụng web của tôi nhận được nhiều yêu cầu (mỗi yêu cầu, nó sẽ đặt một mục vào hàng đợi Redis) và tôi muốn tránh tạo kết nối mới mọi yêu cầu.có bất kỳ ứng dụng khách redis php nào hỗ trợ kết nối liên tục không?
Trả lời
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ó.
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.
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
Đồ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
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',
),
);
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ả. –
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.)
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
- 1. Redis pub/sub model có yêu cầu kết nối liên tục với redis không?
- 2. Có bất kỳ mẫu nào hỗ trợ liên kết 2 chiều bằng backbone.js không?
- 3. Tác vụ nền không được kết nối với bất kỳ ứng dụng khách nào trong Meteor
- 4. WCF4 (.NET Framework 4) có hỗ trợ ghép nối kết nối máy khách không?
- 5. Tại sao các kết nối liên tục không được hỗ trợ bởi URLLib2?
- 6. Danh sách liên kết Java hỗ trợ loại bỏ nhanh bất kỳ nút nào?
- 7. Không có trình kết nối khách hàng nào hỗ trợ giao thức được yêu cầu: 'HTTP'
- 8. Làm cách nào tôi có thể sử dụng ứng dụng khách redis cục bộ để kết nối với ổ cắm
- 9. mysqli kết nối liên tục
- 10. (1002) - Không kết nối khách hàng có sẵn hỗ trợ giao thức yêu cầu: 'HTTPS'
- 11. Cách liên kết với bất kỳ cổng nào có sẵn?
- 12. Kết nối liên tục để ghi nhớ trong PHP
- 13. MySQL - kết nối liên tục vs kết nối tổng hợp
- 14. Redis có hỗ trợ tính nhất quán cao không
- 15. SmtpException: Máy chủ không hỗ trợ kết nối an toàn
- 16. xdebug không kết nối với khách hàng?
- 17. Phụ đề có được hỗ trợ trong bất kỳ điều khiển video gốc nào không?
- 18. DART có hỗ trợ các kết nối SSL/TLS của khách hàng chưa?
- 19. Xdebug: kết nối từ bất kỳ máy chủ nào
- 20. Bất kỳ proxy HTTP nào có hỗ trợ rõ ràng, có thể cấu hình cho yêu cầu/phản hồi đệm và kết nối bị trì hoãn?
- 21. Hệ thống tệp có hỗ trợ để liên kết cứng
- 22. Subversion có được "hỗ trợ" bằng các công cụ tích hợp liên tục hơn Mercurial không?
- 23. Tại sao việc triển khai ứng dụng khách websocket hiện tại không hỗ trợ proxy?
- 24. Có bất kỳ trình duyệt nào hỗ trợ CSS3 phần tử giả "điểm đánh dấu" không?
- 25. Có bất kỳ triển khai LOGO nguồn mở/miễn phí nào hỗ trợ dynaturtles không?
- 26. Có bất kỳ khung công tác web MVC nào hỗ trợ nhiều loại yêu cầu không?
- 27. Khe cắm Python liên kết với bất kỳ IP nào?
- 28. Bản ghi được liên kết với bất kỳ bảng nào?
- 29. IE6 có hỗ trợ bất kỳ phần tử HTML5 nào không?
- 30. mailto: liên kết không được hỗ trợ trong Android?
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
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
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