PHP verfügt über zwei Memcache-Clients: PHP Memcache und PHP Memcached.
PHP Memcache ist unabhängig in PHP implementiert. Aus unserer Praxis haben wir herausgefunden, dass es viele Probleme gibt und es nur wenige Funktionen und Attribute gibt, die auf PHP Memcache basieren Auf der nativen c libmemcached-Erweiterung wird empfohlen, sie vollständiger durch php memcached zu ersetzen.
1.1 Verteilungsprobleme
PHP-Memcache wechselt standardmäßig automatisch, sodass manchmal alte Daten abgerufen werden und der Wert unregelmäßig ist.
Von Internetnutzern geteilte Fragen:
Ich bin heutzutage auf ein kleines Problem gestoßen. Das Phänomen war ziemlich seltsam. Das Produkt verwendete zwei verteilte Memcached-Server. Gelegentlich ist die von einem bestimmten Zähler abgerufene Zahl falsch und liegt schließlich am Failover-Mechanismus des PHP-Memcache-Clients.
Wir wissen, dass in der verteilten Memcached-Umgebung ein bestimmter Schlüssel einem bestimmten Memcached durch Hash-Berechnung zugewiesen wird.
Wenn memcache.allow_failover = 1 in php.ini ist und in einer verteilten Umgebung ein Problem mit einem Memcached auftritt, wird automatisch ein anderes Memcached ausprobiert, und das oben genannte Problem tritt auf. Daher müssen Sie „allow_failover = 0“ festlegen. Wenn es dann nicht abgerufen werden kann, wird ein Fehler direkt zurückgegeben und es wird nicht von anderen MCs abgerufen. Dadurch werden häufige Wechselinstanzen vermieden, wenn Netzwerkanomalien oder serverseitige Anomalien auftreten, und alte Daten wird abgerufen.
Erwähnte Lektionen auf Sina Weibo:
Ersetzen Sie PHP Memcache durch PHP Memcached, was die Stabilität bei hoher Parallelität erheblich verbessert.
Außerdem wurden die Funktionen aktualisiert Je mehr, desto genauer ist der Fehlercode.
Mehrstufiger Cache, der die Auswirkungen des Ausfalls bestimmter Cache-Knoten reduziert und sowohl Lese- als auch Schreibvorgänge zwischenspeichert
Ersetzen Sie die Memcached-API einheitlich durch libmemcached (um Multi-Cache-Knoten zu erleichtern). Sprachzugriff auf Memcached, Verteilung und andere Regeln konsistent machen)
Der PHP-Memcache-Client hat ein 1-Sekunden-Timeout-Intervall, das nicht geändert werden kann:
bool Memcache: :connect ( string $host [, int $port [, int $timeout ]] )
Der dritte Parameter kann ursprünglich das Timeout in Sekunden festlegen, kann aber nicht geändert werden.
Die folgenden drei Methoden zum Ändern des Zeitlimits wurden getestet und sind alle ungültig:
1.3.1. Memcache api Memcache::setServerParams kann nicht geändert werden;
Ändern des Memcache-Quellcodes vi php_memcache. h-Makrodefinition kann nicht geändert werden;
1.3.3. Diese Konfiguration in php.ini: default_socket_timeout = 60 ist für dieses Timeout ungültig.
Php Memcache, ein alter Client, hat sehr wenige Eigenschaften, die festgelegt werden müssen;
Die Fehlercodegranularität ist sehr grob, was es schwierig macht, ihn nach einem Fehler zu finden;
Und es hat viele Funktionen. Einige fehlen:
项目 pecl/memcache pecl/memcached First Release Date 2004-06-08 2009-01-29 (beta) Actively Developed Yes Yes External Dependency None libmemcached Automatic Key Fixup1 Yes No Append/Prepend No Yes Automatic Serialzation2 Yes Yes Binary Protocol No Optional CAS No Yes Compression Yes Yes Communication Timeout Connect Only Various Options Consistent Hashing Yes Yes Delayed Get No Yes Multi-Get Yes Yes Session Support Yes Yes Set/Get to a specific server No Yes Stores Numerics Converted to Strings Yes