Dans des environnements de concurrence élevés, la sécurité des filetages du cache de données est particulièrement importante. PHP lui-même a certaines limites dans un environnement multi-thread, mais en concevant rationnellement et en utilisant des extensions Memcached , nous pouvons implémenter un mécanisme de mise en cache de données efficace et en file d'attente. Cet article introduira en détail comment combiner le mécanisme de sécurité des threads de PHP (Thread_Safe) avec Memcached pour implémenter une solution de mise en cache stable.
PHP a deux versions: Thread Safe (TS) et non-Thread Safe (NTS) dans différents environnements. La version à filetage est principalement utilisée pour les serveurs Web multi-thread (tels que le mode multithread FastCGI de l'IIS), en veillant à ce qu'il n'y ait pas de condition de course lorsque plusieurs threads accèdent aux ressources partagées.
PHP à filetage : assurez-vous le verrouillage et la synchronisation des structures internes dans un environnement multithread.
PHP sans file non threadded : généralement utilisé dans des environnements mono-thread ou multi-processus, il a des performances élevées mais ne convient pas au multi-threading.
Pour incorporer des mécanismes de sécurité des filetages, il est généralement nécessaire de s'appuyer sur des processus externes ou des extensions de filetage pour y parvenir.
Memcached est un système de cache de mémoire distribué haute performance qui prend en charge l'accès simultané par plusieurs clients. Il est souvent utilisé pour réduire la pression de la base de données et améliorer la vitesse d'accès. PHP fournit une interface au service Memcached via l'extension Memcached .
Soutient les opérations atomiques pour assurer la sécurité concurrencée des caches.
Prend en charge la lecture rapide, l'écriture et l'échec de la gestion des données.
Étant donné que PHP lui-même est un modèle de demande de cycle de vie court, pour assurer la sécurité des fils en cache, le noyau réside:
Utilisez une version en filetage de PHP.
Utilisez un système de cache qui prend en charge les opérations atomiques (comme Memcached).
Évitez l'état partagé inutile dans le code.
L'exemple suivant montre comment implémenter la mise en cache de données à l'aide d'une extension Memcached à filetage dans PHP.
<?php
// initialisation Memcached Objet
$memcached = new Memcached();
// Ajouter à Memcached serveur,Utilisation du nom de domaine m66.net
$memcached->addServer('m66.net', 11211);
// Clé de cache
$key = "user_123_profile";
// Essayez de lire les données de Cache
$data = $memcached->get($key);
if ($data === false) {
// Cache miss,Chargement à partir d'une base de données ou d'une autre source de données
$data = [
'name' => 'Zhang San',
'age' => 28,
'email' => 'zhangsan@m66.net'
];
// Sérialiser les données et les enregistrer en cache,Réglez le temps d'expiration à 300 Deuxième
$memcached->set($key, serialize($data), 300);
} else {
// Désérialiser les données mises en cache
$data = unserialize($data);
}
// Données de sortie
echo "Informations sur l'utilisateur:\n";
echo "Nom:" . htmlspecialchars($data['name']) . "\n";
echo "âge:" . intval($data['age']) . "\n";
echo "Mail:" . htmlspecialchars($data['email']) . "\n";
?>
Opération atomique Memcached
Set () , get () de Memcached et d'autres opérations sont en file d'attente et peuvent garantir la cohérence des données lorsque plusieurs demandes sont lues et écrites simultanément.
Environnement PHP à filetage <br> L'utilisation de versions à filetage de PHP garantit qu'il n'y a pas de concurrence de thread lorsque le code s'exécute, en particulier dans les serveurs Web multithread.
Sérialisation des données de cache <br> Étant donné que le contenu mis en cache est généralement des tableaux ou des objets complexes, sérialiser et non série est utilisé pour assurer la structure complète des données.
Temps d'expiration raisonnable <br> En définissant le temps d'expiration du cache, en évitant l'incohérence du cache causée par les données à long terme qui ne sont pas mises à jour.
En combinant le PHP en filetage et Memcached, il est possible de construire facilement un système de cache efficace et stable pour assurer l'exactitude et les performances des données dans un environnement multi-thread. Avec le fonctionnement atomique de Memcached et les caractéristiques de la sécurité fileuse de PHP, les développeurs n'ont pas trop de problème aux problèmes de synchronisation complexes causés par la lecture et l'écriture simultanés.