Maison >développement back-end >tutoriel php >Explication détaillée de l'intégration et de l'utilisation de PHP et Memcached

Explication détaillée de l'intégration et de l'utilisation de PHP et Memcached

WBOY
WBOYoriginal
2023-06-25 13:04:401028parcourir

Avec le développement d'applications Web, de plus en plus d'applications utiliseront des systèmes complets de mise en cache de mémoire pour offrir de meilleures performances et une plus grande évolutivité. Dans de nombreux cas, Memcached devient la solution privilégiée. Cet article présentera l'utilisation intégrée de PHP et Memcached, ainsi que quelques conseils d'utilisation associés.

Memcached est un système de mise en cache d'objets en mémoire hautes performances qui peut être utilisé pour accélérer les applications Web dynamiques. Memcached a été créé à l'origine par Brad Fitzpatrick avec pour objectif principal son site de réseautage social LiveJournal. Memcached est conçu comme un système de mise en cache distribué, il est donc évolutif et performant.

Utiliser Memcached en PHP

Il est facile d'intégrer des applications PHP et Memcached via l'extension PECL en PHP. Ce qui suit est un exemple simple qui utilise PHP pour implémenter les opérations de base get et set de Memcached :

<?php
//连接Memcached服务器
$memcached = new Memcached();
$memcached->addServer("localhost", 11211);

//存储数据
$memcached->set("key1", "value1");

//获取数据
$value = $memcached->get("key1");
echo $value;
?>

Dans l'exemple ci-dessus, nous nous connectons d'abord à un serveur Memcached à l'aide de l'objet Memcached, puis utilisons set() La fonction stocke une paire clé-valeur dans le cache et utilise enfin la fonction <code>get() pour obtenir la valeur clé du cache. Très simple et intuitif. set()函数将一个key-value对存储到缓存中,最后使用get()函数从缓存中获取key的值。非常简单和直观。

在应用程序中使用Memcached

在实际应用程序中,使用Memcached的最常见方式是将其用于缓存和提高性能的数据,例如数据库查询结果、模板和其他计算密集型计算结果等。Memcached还支持将其作为锁定系统来控制并发请求,以避免冲突。

以下是一个使用Memcached缓存MySQL查询结果的示例:

<?php
//连接Memcached服务器
$memcached = new Memcached();
$memcached->addServer("localhost", 11211);

//查询MySQL数据库
$results = mysqli_query($con, "SELECT * FROM users WHERE status=1");

//循环结果
while($row = mysqli_fetch_array($results)) {
   //将结果存储到缓存中
   $memcached->set($row['user_id'], $row);
}

//关闭MySQL连接
mysqli_close($con);

//获取结果
$user_id = 123;
$result = $memcached->get($user_id);
?>

在上述示例中,我们首先连接了Memcached服务器,并查询了MySQL数据库,将结果存储在缓存中。然后我们获取了一个特定的结果。如果这个结果已经被缓存过了,那么它将被立即返回,避免了重复查询这个结果的需要。

在实际应用程序中,当使用Memcached缓存巨大的数据对象时,我们建议使用Memcached的分布式机制。这一点将在下面的部分进行介绍。

使用Memcached的一些技巧

以下是一些使用Memcached的技巧,以提高性能和可靠性:

  1. 利用Memcached作为锁定系统

当并发请求同时访问共享资源时,可能会发生竞态条件。在这种情况下,Memcached可以用作分布式锁定系统,以避免并发请求冲突。比如我们要更新一个计数器,那么就可以使用Memcached作为锁定系统。

<?php
//连接Memcached服务器
$memcached = new Memcached();
$memcached->addServer("localhost", 11211);

//以自增方式计数
$key = "counter";
$counter = $memcached->increment($key);

//获取计数器结果
echo "Counter: ".$counter;
?>

在上述示例中,我们使用Memcached对象连接了Memcached服务器,并使用increment()函数将计数器的值自增1。这样就能避免多个并发请求对计数器的竞争。

  1. 利用选项和过期时间

Memcached不仅可以存储数据,还可以使用附加选项来控制缓存数据的行为。使用过期时间选项,可以确定每个键值对的存储有效期限,从而加快缓存的轮换。

<?php
//连接Memcached服务器
$memcached = new Memcached();
$memcached->addServer("localhost", 11211);

//设置过期时间
$memcached->set("key1", "value1", 3600);

//获取具有过期时间的键值对
$value = $memcached->get("key1");

//除了过期时间之外,可以使用其他选项
$memcached->set("key1", "value1", 3600, 0);
$memcached->set("key1", "value1", 0, 100);
?>

在上述示例中,我们首先使用set()函数存储键值对,并设置了一个过期时间。然后我们使用get()函数获取这个键值对。如果缓存中的数据已经过期,则返回空值。

  1. 利用Memcached的扩展性

Memcached的设计目标之一是其可扩展性。这一点是通过将Memcached服务嵌入到内部集群中实现的,以同时利用多台计算机提供缓存服务。

<?php
//连接Memcached服务器
$memcached = new Memcached();
$memcached->addServers(array(
   array("server1", 11211, 33),
   array("server2", 11211)
));

//保存数据到Memcached服务器
$memcached->set("key1", "value1");

//从Memcached服务器获取数据
$value = $memcached->get("key1");
?>

在上述示例中,我们使用addServers()函数设置多台Memcached服务器,以便将请求分发到多个服务器。然后,我们使用set()get()

Utilisation de Memcached dans les applications

Dans les applications réelles, la manière la plus courante d'utiliser Memcached est de l'utiliser pour la mise en cache et l'amélioration des données des données, telles que les résultats de requêtes de base de données, les modèles et autres résultats de calculs gourmands en calcul. Memcached le prend également en charge comme système de verrouillage pour contrôler les demandes simultanées afin d'éviter les conflits.

Voici un exemple d'utilisation de Memcached pour mettre en cache les résultats des requêtes MySQL : 🎜rrreee🎜Dans l'exemple ci-dessus, nous nous sommes d'abord connectés au serveur Memcached et avons interrogé la base de données MySQL pour stocker les résultats dans le cache. Nous obtenons alors un résultat spécifique. Si le résultat a été mis en cache, il sera renvoyé immédiatement, évitant ainsi d'avoir à interroger le résultat à plusieurs reprises. 🎜🎜Dans les applications réelles, lorsque vous utilisez Memcached pour mettre en cache d'énormes objets de données, nous vous recommandons d'utiliser le mécanisme distribué de Memcached. Ceci sera abordé dans la section suivante. 🎜🎜Quelques conseils pour utiliser Memcached🎜🎜Voici quelques conseils pour utiliser Memcached afin d'améliorer les performances et la fiabilité : 🎜
  1. Utiliser Memcached comme système de verrouillage
🎜Lorsque des demandes simultanées accèdent simultanément Lorsque En partageant des ressources, des conditions de concurrence peuvent survenir. Dans ce cas, Memcached peut être utilisé comme système de verrouillage distribué pour éviter les demandes concurrentes conflictuelles. Par exemple, si nous voulons mettre à jour un compteur, nous pouvons utiliser Memcached comme système de verrouillage. 🎜rrreee🎜Dans l'exemple ci-dessus, nous avons utilisé l'objet Memcached pour nous connecter au serveur Memcached et utilisé la fonction increment() pour incrémenter la valeur du compteur de 1. Cela évite la concurrence pour le compteur provenant de plusieurs demandes simultanées. 🎜
  1. Options d'exploitation et délais d'expiration
🎜Memcached stocke non seulement les données, mais vous pouvez également utiliser des options supplémentaires pour contrôler le comportement des données mises en cache. À l’aide de l’option de délai d’expiration, vous pouvez déterminer la durée de stockage de chaque paire clé-valeur, accélérant ainsi la rotation du cache. 🎜rrreee🎜Dans l'exemple ci-dessus, nous utilisons d'abord la fonction set() pour stocker la paire clé-valeur et définir un délai d'expiration. Ensuite, nous utilisons la fonction get() pour obtenir cette paire clé-valeur. Si les données du cache ont expiré, une valeur nulle est renvoyée. 🎜
  1. Profiter de l'évolutivité de Memcached
🎜L'un des objectifs de conception de Memcached est son évolutivité. Ceci est réalisé en intégrant le service Memcached dans un cluster interne pour exploiter plusieurs ordinateurs afin de fournir des services de mise en cache simultanément. 🎜rrreee🎜Dans l'exemple ci-dessus, nous utilisons la fonction addServers() pour configurer plusieurs serveurs Memcached afin de distribuer les requêtes à plusieurs serveurs. Nous utilisons ensuite les fonctions set() et get() pour stocker et récupérer les données sur le serveur. Ce mécanisme de distribution est l'un des mécanismes d'évolutivité les plus puissants de Memcached. 🎜🎜Conclusion🎜🎜Memcached est un système de mise en cache d'objets en mémoire hautes performances qui peut être utilisé pour accélérer les applications Web dynamiques. Les extensions PHP facilitent l'intégration d'applications PHP dans Memcached, améliorant ainsi les performances et l'évolutivité des applications. L'utilisation de certaines techniques de Memcached peut nous aider à mieux utiliser le service Memcached et à améliorer les performances et la fiabilité de l'application. 🎜

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