APCU_ENTRY est une fonction de cache APCU (Cache PHP alternative) fournie par PHP. APCU est un cache au niveau de l'utilisateur conçu pour mettre en cache des variables dans les scripts PHP. En stockant des données en mémoire, APCU peut réduire efficacement le nombre d'accès à la base de données ou au système de fichiers, améliorant ainsi les performances.
La fonction de la fonction APCU_ENTRY est de vérifier s'il existe certaines données dans le cache. S'il existe, les données sont récupérées directement à partir du cache; S'il n'existe pas, les données sont calculées et le résultat est stocké dans le cache. Ce processus évite non seulement les calculs répétés, mais assure également l'efficacité du cache.
apcu_entry(string $key, callable $callback, int $ttl = 0)
$ KEY : Le nom de clé mis en cache, utilisé pour identifier de manière unique les données mises en cache.
$ rappel : une fermeture (rappel) utilisée pour calculer le contenu mis en cache. La fermeture n'est exécutée que si le cache n'existe pas.
$ ttl : le temps d'expiration mis en cache, en secondes (paramètre facultatif).
Les données JSON sont souvent utilisées dans les applications PHP pour échanger des données avec le frontal ou stocké dans une base de données. Dans certains cas, nous devons obtenir des données JSON à partir d'une interface externe et l'utiliser fréquemment. Afin d'éviter de demander des interfaces externes à chaque fois, nous pouvons utiliser APCU_ENTRY pour mettre en cache les données JSON dans la mémoire, réduire les demandes de réseau en double et améliorer les performances.
Supposons que nous ayons une API externe (comme l'API GitHub) et que nous devons obtenir des informations utilisateur et les mettre en cache. L'utilisation d'APCU_ENTRY peut éviter un accès fréquent à cette API.
<?php
// Définir le nom de clé mis en cache
$key = 'github_user_data';
// utiliser apcu_entry cache JSON données
$user_data = apcu_entry($key, function() {
// Simuler de l'extérieur API 获取données
$url = 'https://api.github.com/users/octocat';
// envoyer GET Demander et obtenir JSON réponse
$json_data = file_get_contents($url);
// 将réponse转换为 PHP Tableau
return json_decode($json_data, true);
}, 3600); // 设置cache 1 Heure(3600Deuxième)
// 输出cache或获取到的données
echo 'User Name: ' . $user_data['login'] . "\n";
echo 'User Bio: ' . $user_data['bio'] . "\n";
?>
Dans l'exemple ci-dessus, APCU_ENTRY vérifie si les données utilisateur GitHub ont été mises en cache. Si le cache existe, il renverra directement le résultat mis en cache. Si le cache n'existe pas, accédez à l'API externe pour obtenir les données via la fonction file_get_contents , puis stockez les données dans le cache et définissez le temps d'expiration du cache à 1 heure.
Étant donné qu'APCU_ENTRY stocke les données mises en cache en mémoire, il convient au cache relativement petit et fréquemment accessible aux données. Pour les ensembles de données ou les données plus importants qui nécessitent de la persistance, d'autres schémas de mise en cache (tels que redis ou memcached) sont recommandés.
APCU_ENTRY est un cache basé sur la mémoire, donc son stockage est temporaire et le cache expirera à la fin du script PHP.
En plus des données JSON, APCU_ENTRY peut également être utilisée pour mettre en cache des objets PHP. Dans de nombreux scénarios, les objets PHP nécessitent des calculs complexes ou interroger de grandes quantités de données d'une base de données. La mise en cache de ces objets peut considérablement améliorer la vitesse de réponse du programme.
Supposons que nous ayons un résultat de requête de base de données qui doit être encapsulé dans un objet, et nous pouvons mettre en cache l'objet pour éviter la requête de base de données chaque fois que nous le demandons.
<?php
class User
{
public $id;
public $name;
public $email;
public function __construct($id, $name, $email)
{
$this->id = $id;
$this->name = $name;
$this->email = $email;
}
}
// Définir le nom de clé mis en cache
$key = 'user_data_123';
// utiliser apcu_entry cachedonnées库查询结果
$user = apcu_entry($key, function() {
// 模拟从données库获取données
$id = 123;
$name = 'John Doe';
$email = '[email protected]';
// créer User Objet et retour
return new User($id, $name, $email);
}, 3600); // 设置cache 1 Heure(3600Deuxième)
// 输出cache或获取到的données
echo 'User Name: ' . $user->name . "\n";
echo 'User Email: ' . $user->email . "\n";
?>
Dans cet exemple, nous mettons en cache un objet utilisateur à l'aide d'APCU_ENTRY . Chaque fois que les demandes APCU_ENTRY, APCU_ENTRY vérifient si cet objet existe déjà dans le cache. S'il existe, il renverra directement l'objet mis en cache; Si le cache n'existe pas, il créera un nouvel objet et le mettra en cache.
Les objets doivent être sérialisés avant de pouvoir être stockés dans le cache. APCU gérera automatiquement la sérialisation et la désérialisation des objets, donc les développeurs n'ont pas besoin de fonctionner manuellement.
Une fois le cache expiré, la nouvelle demande recalcule et mettra en cache les résultats.