Mit der Entwicklung von Webanwendungen wird die Komplexität der Datenverarbeitung immer höher. Um eine bessere Skalierbarkeit und Leistung zu bieten, haben viele Anwendungen NoSQL-Datenbanken übernommen. Memcached ist ein beliebter NoSQL-In-Memory-Cache, der die Antwortzeit von Webanwendungen deutlich verbessern und gleichzeitig eine hohe Datenverfügbarkeit bieten kann.
Wenn Ihre Anwendung jedoch wächst, kann die Speicherkapazität einer einzelnen Instanz von Memcached an ihre Grenzen stoßen. In diesem Fall muss die Memcached-Datenbank-Sharding-Technologie verwendet werden, um die Daten auf mehrere Server zu verteilen. In diesem Artikel erfahren Sie, wie Sie Memcached-Datenbank-Sharding mit PHP implementieren.
Memcached-Server-Sharding
In Memcached wird eine Hash-Funktion verwendet, um die Schlüssel von Daten bestimmten Servern zuzuordnen. Die Hash-Funktion kann MD5, CRC32 usw. sein. Wenn Daten hinzugefügt oder aktualisiert werden, verwendet Memcached eine Hash-Funktion, um die Schlüssel zu berechnen und zu bestimmen, welcher Server verwendet werden soll. Wenn wir Memcached-Datenbank-Sharding verwenden, müssen wir Schlüssel mithilfe derselben Methode wie eine Hash-Funktion bestimmten Servern zuordnen. Dies kann durch Befolgen der Schritte erfolgen:
$servers = array(
'192.168.1.101:11211', // Server 1 '192.168.1.102:11211', // Server 2 '192.168.1.103:11211' // Server 3
);
$hash = md5('mykey');
Implementieren Sie dies mit dem folgenden Code:
$hash = md5('mykey');
$hash_number = intval("0x".substr($hash, 0, 8));
$server_index = $hash_number % count($servers);
$server = $servers [$server_index ];
In diesem Beispiel ordnen wir „mykey“ zunächst mithilfe von MD5-Hashing einem Hashwert zu. Anschließend berechnen wir den 32-Bit-Ganzzahlwert ohne Vorzeichen und berechnen den Modul dieses Werts anhand der Länge des Serverarrays. Dadurch erhalten wir einen Serverindex und können diesen Index verwenden, um die richtige Server-IP-Adresse und Portnummer aus der Serverliste abzurufen.
$memcached = new Memcached();
$memcached->addServers($servers);
$hash = md5('mykey');
$hash_number = intval("0x".substr( $ hash, 0, 8));
$server_index = $hash_number % count($servers);
$server = $servers[$server_index];
$memcached->setByKey($server, 'mykey', ' data ', 60);
In diesem Beispiel rufen wir zunächst die Methode addServers() der Memcached-Klasse mithilfe des Server-Arrays auf, um die Liste der zu verwendenden Server anzugeben. Anschließend verwenden wir den Hash und den Server, um die Methode setByKey() aufzurufen, um die Daten auf dem richtigen Server zu speichern. Wir bieten auch eine Ablaufzeit (60 Sekunden) an.
$hash = md5('mykey');
$hash_number = intval("0x".substr($hash, 0, 8));
$server_index = $hash_number % count($servers);
$server = $servers[$server_index];
$data = $memcached->getByKey($server, 'mykey');
In diesem Beispiel verwenden wir den Hashwert und den Server, um getByKey( aufzurufen )-Methode, rufen Sie die Daten vom richtigen Server ab. Wenn der Schlüssel nicht vorhanden ist, wird null zurückgegeben.
Zusammenfassung
Bei Verwendung von Memcached können Sie mithilfe der Sharding-Technologie Daten auf mehreren Servern speichern. Mit PHP können wir die Memcached-Klasse in der Memcached-Erweiterungsbibliothek verwenden, die verschiedene Methoden zum Hinzufügen von Servern, Einrichten und Abrufen von Daten bereitstellt. Mithilfe einer Hash-Funktion können wir den Hash des Schlüssels berechnen und ihn dem richtigen Server zuordnen. Denken Sie daran, dass sich die Wahl der Hash-Funktion und der Intervallzuordnung direkt auf die Ausgewogenheit und Leistung der Daten auswirkt.
Das obige ist der detaillierte Inhalt vonSo implementieren Sie Memcached-Datenbank-Sharding in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!