Heim  >  Artikel  >  Backend-Entwicklung  >  PHP Memcache und PHP Memcached und es sind Probleme aufgetreten

PHP Memcache und PHP Memcached und es sind Probleme aufgetreten

高洛峰
高洛峰Original
2016-11-29 10:30:231166Durchsuche

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. Probleme mit PHP-Memcache

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.

1.2 Stabilitätsprobleme bei hoher Parallelität

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.

Twitters Caching-Erfahrung

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)

1.3 Das 1-Sekunden-Timeout-Intervall kann nicht geändert werden

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.

2. Vergleich zwischen Memcache und Memcached

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:

Wird PHP hauptsächlich für zwei Clients verwendet. Das eine ist das ältere, umfangreichere PECL/Cache und das andere ist das neue, selten verwendete, funktionsreichere PECL/Cache.

Unterstützt mehrere Server wie Basis, Wert festlegen, Wert abrufen, erhöhen, verringern und Daten abrufen.

Hier sind einige erweiterte Funktionen und Informationen.

项目 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


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn