Maison  >  Article  >  développement back-end  >  Comment utiliser le cache distribué pour améliorer les performances de concurrence des programmes PHP ?

Comment utiliser le cache distribué pour améliorer les performances de concurrence des programmes PHP ?

王林
王林original
2023-08-10 13:37:11854parcourir

Comment utiliser le cache distribué pour améliorer les performances de concurrence des programmes PHP ?

Comment utiliser le cache distribué pour améliorer les performances de concurrence des programmes PHP ?

Vue d'ensemble :
Lors du développement de programmes PHP à haute concurrence, nous rencontrons souvent des goulots d'étranglement en termes de performances causés par un accès fréquent à la base de données. Pour résoudre ce problème, nous pouvons utiliser un système de cache distribué pour améliorer les performances de concurrence. Cet article expliquera comment utiliser le système de mise en cache distribué Redis pour optimiser les performances de concurrence des programmes PHP et fournira des exemples de code correspondants.

  1. Installation et configuration de Redis
    Tout d'abord, nous devons installer Redis et nous assurer qu'il fonctionne correctement sur le serveur. Vous pouvez installer Redis via la commande suivante :

    sudo apt-get install redis-server

    Une fois l'installation terminée, démarrez le serveur Redis :

    sudo systemctl start redis

    Vous pouvez vérifier l'état de fonctionnement du serveur Redis en vérifiant s'il est en cours d'exécution :

    redis-cli ping

    Si "PONG" est renvoyé, cela signifie que le serveur Redis fonctionne normalement.

  2. Extension Redis
    Pour utiliser Redis en PHP, nous devons installer l'extension Redis. Vous pouvez installer l'extension Redis avec la commande suivante :

    sudo apt-get install php-redis

    Une fois l'installation terminée, éditez le fichier de configuration PHP php.ini et assurez-vous que les lignes suivantes ne sont pas commentées :

    extension=redis.so

    Redémarrez le serveur PHP pour effectuer la configuration prendre effet :

    sudo systemctl restart php-fpm
  3. Utiliser Redis met en cache les résultats des requêtes
    Dans les programmes PHP, nous avons souvent besoin d'accéder fréquemment à la base de données pour obtenir des données. Afin de réduire la charge sur la base de données, nous pouvons utiliser Redis pour mettre en cache les résultats des requêtes, améliorant ainsi les performances de concurrence.

    <?php
    // 初始化 Redis
    $redis = new Redis();
    $redis->connect('localhost', 6379); // 默认的 Redis 服务器地址和端口
    
    function getDataFromDatabase($id) {
     // 模拟从数据库中获取数据的过程
     sleep(2);
     return "data_" . $id;
    }
    
    function getDataFromCache($id) {
     global $redis;
     return $redis->get($id);
    }
    
    function saveDataToCache($id, $data) {
     global $redis;
     $redis->set($id, $data);
     $redis->expire($id, 60); // 设置缓存的过期时间为 60 秒
    }
    
    function getData($id) {
     $data = getDataFromCache($id);
     if (!$data) {
         $data = getDataFromDatabase($id);
         saveDataToCache($id, $data);
     }
     return $data;
    }
    
    $id = $_GET['id'];
    $data = getData($id);
    echo $data;
    ?>

    Dans l'exemple de code ci-dessus, nous avons utilisé le cache Redis pour stocker les résultats de la requête. Tout d'abord, le programme vérifiera si les données requises existent déjà dans le cache. Si elles existent, les données du cache seront utilisées directement. Si elles n'existent pas dans le cache, les données seront obtenues à partir de la base de données et enregistrées dans. le cache Redis Dans le même temps, le délai d'expiration du cache sera défini sur 60 secondes.

En mettant en cache les résultats des requêtes, nous pouvons éviter les accès fréquents à la base de données et améliorer les performances de concurrence. De plus, en définissant un délai d'expiration du cache approprié, nous pouvons contrôler de manière flexible la période de validité des données mises en cache.

  1. Cache distribué
    Afin d'améliorer encore les performances de concurrence, nous pouvons utiliser un système de cache distribué pour stocker les données mises en cache de manière distribuée sur plusieurs serveurs.

Lorsque nous utilisons plusieurs serveurs Redis, nous pouvons utiliser une fonction de hachage pour décider sur quel serveur Redis stocker les données. Voici un exemple de code qui utilise un algorithme de hachage cohérent pour implémenter la mise en cache distribuée :

<?php
// 初始化 Redis 服务器地址和端口
$redisServers = [
    '127.0.0.1:6379', '127.0.0.1:6380', '127.0.0.1:6381'
];

// 初始化 Redis 连接
$redisConnections = [];
foreach ($redisServers as $server) {
    $redis = new Redis();
    list($host, $port) = explode(":", $server);
    $redis->connect($host, $port);
    $redisConnections[] = $redis;
}

function getDataFromCache($id) {
    global $redisConnections;
    $hash = crc32($id); // 使用 CRC32 哈希函数计算哈希值
    $index = $hash % count($redisConnections); // 根据哈希值选择 Redis 服务器
    return $redisConnections[$index]->get($id);
}

function saveDataToCache($id, $data) {
    global $redisConnections;
    $hash = crc32($id);
    $index = $hash % count($redisConnections);
    $redisConnections[$index]->set($id, $data);
    $redisConnections[$index]->expire($id, 60);
}

$id = $_GET['id'];
$data = getDataFromCache($id);
if (!$data) {
    $data = getDataFromDatabase($id);
    saveDataToCache($id, $data);
}
echo $data;
?>

Dans l'exemple de code ci-dessus, nous utilisons un algorithme de hachage cohérent pour décider sur quel serveur Redis stocker les données. Tout d'abord, nous calculons la valeur de hachage de la clé via une fonction de hachage, puis sélectionnons un serveur Redis pour stocker les données en fonction de la valeur de hachage. De cette façon, les données peuvent être distribuées sur plusieurs serveurs Redis, améliorant ainsi les performances de concurrence.

Ce qui précède est la méthode et l'exemple de code pour utiliser le système de cache distribué Redis pour améliorer les performances de concurrence des programmes PHP. En mettant en cache les résultats des requêtes et la mise en cache distribuée, nous pouvons réduire efficacement la charge sur la base de données et améliorer les performances de concurrence des programmes PHP. J'espère que cet article vous sera utile !

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn