Als Titel suche ich nach einem php Redis Client, der persistente Verbindung unterstützt, weil meine Webanwendung eine Menge Anfragen erhält (jede Anfrage, es wird ein Objekt in die Redis Queue legen) und ich möchte create vermeiden neue Verbindung jede Anfrage.Gibt es irgendwelche PHP-Redis Client unterstützt persistente Verbindung?
Antwort
Nicht sicher, ob dies unterstützt wird, aber Sie sollten sich unbedingt Predis und Rediska ansehen, diese beiden (besonders Predis AFAIK) sind die besten verfügbaren PHP Redis Clients.
PHP-Redis unterstützt persistente Verbindungen, da es eine in C geschriebene php-Erweiterung verwendet, die ihm einen Mechanismus zum Teilen von Verbindungen zwischen Anforderungen gibt. Sehen Sie sich die Dokumentation unter popen and pconnect an.
Predis kann nicht persistente Verbindungen unterstützen, da es 100% PHP und PHP ist, teilt nichts zwischen jeder Anfrage.
Nach dem Predis-Autor ist diese Antwort inkorrekt. Er behauptet, dass PHP-Anfragen Informationen austauschen könnten, wenn die PHP-Prozesse so konfiguriert sind, dass sie resident zwischen Anfragen bleiben, wie es bei vielen Implementierungen der Fall ist. – kevinlawler
Einverstanden, diese Antwort ist falsch. 'popen()' ist sowieso der falsche Ressourcentyp (p == piped process). 'pconnect()' ist vollständig in der Lage Zend's interne "xport" Ressourcenbehandlung zu unterstützen, die es ermöglicht persistente Verbindungen aufrechtzuerhalten. Predis selbst verwendet [stream_socket_client()] (http://php.net/stream_socket_client) mit einem optionalen 'STREAM_CLIENT_PERSISTENT' Flag. Wenn der PHP-Prozess von etwas wie Apache mit einem Pool von Backend-Prozessen/Threads verwaltet wird, überleben diese persistenten Verbindungen innerhalb der Lebensdauer des Backends. – Joe
Predis unterstützt persistente Verbindungen verwendet es PhpiredisStreamConnection
mit der persistent=1
Flag Syntax seit 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',
),
);
Ich habe persistant = 1 mit PhpiredisStreamConnection hinzugefügt und es sieht so aus, als ob ich immer noch den gleichen TIME_WAIT-Socket bekomme. –
PhpRedis derzeit persistente Verbindungen unterstützt. Mit PHP 7.0 und PhpRedis 3.0, eine ständige Verbindung mit pconnect()
wie diese machen:
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);
}
ist etwa 10-mal schneller (9,6 ms vs 0,83 ms pro Verbindung) als 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);
}
Hinweis: " Diese Funktion ist in Threaded-Versionen nicht verfügbar ". (Ich laufe unter IIS unter Windows, also führe ich die NTS-Version.)
Predis unterstützt dauerhafte Verbindung. Sie müssen nur hartnäckig wie Paramater 1.
hinzufügen Sie den Code unten
$client = new Predis\Client(array(
'scheme' => 'tcp',
'host' => '127.0.0.1',
'port' => 6379,
'database' => 15,
'persistent'=> 1
));
statt
$client = new Predis\Client('tcp://127.0.0.1:6379?database=15');
verwenden, können Sie hier weitere Parameter für die Verbindung finden können: https://github.com/nrk/predis/wiki/Connection-Parameters
- 1. Mysqli persistente Verbindung
- 2. Persistente Verbindung in Bash-Skript
- 3. Ausführungszeit Unterschiede, gibt es irgendwelche?
- 4. Gibt es irgendwelche Guava-Übersichten?
- 5. Gibt es irgendwelche Clojure DSLs?
- 6. Gibt es irgendwelche StackExchange.Redis-Beispielprojekte?
- 7. Gibt es irgendwelche würdigen CSLA-Alternativen?
- 8. Gibt es irgendwelche Redis pub \ sub Benchmarks?
- 9. Persistente SMTP-Verbindung in PHPMailer
- 10. Node.js MySQL benötigt persistente Verbindung
- 11. http persistente Verbindung und SSL-Sitzung
- 12. Gibt es irgendwelche guten Ruby-Konsolen-Anwendungen?
- 13. Gibt es irgendwelche cms für Rails 4?
- 14. CMS Import/Export. Gibt es irgendwelche Standards?
- 15. Gibt es irgendwelche guten Film/Film-APIs?
- 16. Gibt es irgendwelche jQueryMobil-Bild-Schieberegler?
- 17. opencvdotnet und FFMPEG - gibt es irgendwelche Integrationsmöglichkeiten?
- 18. Gibt es irgendwelche MVP Frameworks-Projekte?
- 19. Gibt es irgendwelche Dokumentspeicher auf nativen reagieren?
- 20. Gibt es irgendwelche Nachteile mit ConcurrentHashMap?
- 21. Gibt es irgendwelche .NET Graphics Calculate Libraries?
- 22. Gibt es irgendwelche kostenlosen PHP-Crawler?
- 23. Gibt es irgendwelche Calendar View-Komponenten?
- 24. Gibt es irgendwelche unbenutzten Symbole in Python?
- 25. Gibt es irgendwelche Verwendung für lokale Funktionsdeklarationen?
- 26. Gibt es irgendwelche Gleichgewichtsbedingungen für das Seil?
- 27. Gibt es irgendwelche HTML-Kodierungskonventionen/style/standard
- 28. Gibt es irgendwelche XSL Lint Tools?
- 29. Gibt es irgendwelche ASP.Net MVC Referenzanwendungen
- 30. Persistente Verbindungen zwischen Flash-Client und Java-Server
danke antirez, ich habe noch nie Predis versucht, es scheint Unterstützung persistente Verbindung, ich glaube, dass eine C-Implementierung als PHP-Modul sollte sei schneller, aber ich werde es versuchen und einen Vergleich machen. – secmask
Die Frage ist, ob Predis persistente Verbindungen unterstützt, da es sich um eine reine PHP-Implementierung und nicht um eine C-basierte Erweiterung handelt. Gemäß dem Betreuer unterstützt Predis persistente Verbindungen, wenn Ihre PHP-Prozesse so konfiguriert sind, dass sie resident bleiben. Dies ist typisch für ein seriöses Produktions-PHP + Apache-Setup, obwohl Ihre spezielle Installation variieren kann und eine Konfiguration erfordert. Die [Predis FAQ] (https://github.com/nrk/predis/blob/master/FAQ.markdown) weist darauf hin, dass Verbindungen persistent sind, wenn Predis persistent ist und PHP-Prozesse für Anfragen wiederverwendet werden. – kevinlawler
Haftungsausschluss: Ich habe Predis noch nicht getestet. Ich versuche die C-Erweiterung zuerst, da Predis mit einem sehr ausführlichen Stil eingebaut werden soll. Ich mag es auch nicht, sich auf die Autoload-Mechanismen von PHP zu verlassen. – kevinlawler