Avec le développement des applications web, la complexité du traitement des données est de plus en plus élevée. Pour offrir une meilleure évolutivité et de meilleures performances, de nombreuses applications ont adopté des bases de données NoSQL. Memcached est un cache en mémoire NoSQL populaire qui peut améliorer considérablement le temps de réponse des applications Web tout en offrant une haute disponibilité des données.
Cependant, à mesure que votre application se développe, la capacité de stockage d'une seule instance de Memcached peut atteindre sa limite. Dans ce cas, la technologie de partitionnement de base de données Memcached doit être utilisée pour répartir les données sur plusieurs serveurs. Dans cet article, nous apprendrons comment implémenter le partitionnement de base de données Memcached à l'aide de PHP.
Partagement du serveur Memcached
Dans Memcached, une fonction de hachage est utilisée pour mapper les clés de données à des serveurs spécifiques. La fonction de hachage peut être MD5, CRC32, etc. Lorsque des données sont ajoutées ou mises à jour, Memcached utilise une fonction de hachage pour calculer les clés et déterminer quel serveur utiliser. Lors de l'utilisation du partitionnement de base de données Memcached, nous devons mapper les clés à des serveurs spécifiques en utilisant la même méthode qu'une fonction de hachage. Cela peut être fait en suivant les étapes :
$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');
Implémentez-le en utilisant le code suivant :
$hash = md5('mykey');
$hash_number = intval("0x".substr($hash, 0, 8));
$server_index = $hash_number % count($servers);
$server = $servers [$server_index ];
Dans cet exemple, nous mappons d'abord "mykey" à une valeur de hachage à l'aide du hachage MD5. Nous calculons ensuite la valeur entière non signée de 32 bits et calculons le module de cette valeur en utilisant la longueur du tableau du serveur. Cela nous donnera un index du serveur et nous pourrons utiliser cet index pour obtenir l'adresse IP et le numéro de port corrects du serveur dans la liste des serveurs.
$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);
Dans cet exemple, nous appelons d'abord la méthode addServers() de la classe Memcached en utilisant le tableau de serveurs pour spécifier la liste des serveurs à utiliser. Nous utilisons ensuite le hachage et le serveur pour appeler la méthode setByKey() afin de stocker les données sur le bon serveur. Nous fournissons également un délai d'expiration (60 secondes).
$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');
Dans cet exemple, nous utilisons la valeur de hachage et le serveur pour appeler getByKey( ), récupérez les données du bon serveur. Si la clé n'existe pas, renvoie null.
Résumé
Lorsque vous utilisez Memcached, vous pouvez utiliser la technologie de partitionnement pour stocker des données sur plusieurs serveurs. En utilisant PHP, nous pouvons utiliser la classe Memcached dans la bibliothèque d'extensions Memcached, qui fournit diverses méthodes pour ajouter des serveurs, configurer et obtenir des données. À l'aide d'une fonction de hachage, nous pouvons calculer le hachage de la clé et la mapper au bon serveur. N'oubliez pas que le choix de la fonction de hachage et de l'allocation des intervalles affectera directement l'équilibre et les performances des données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!