La fonction APCU_ENTRY est une fonction fournie par l'extension APCU pour définir des données mises en cache. Contrairement à APCU_STORE et APCU_FETCH , APCU_ENTRY peut exécuter automatiquement une fonction de rappel pour générer des données lorsque le cache n'existe pas, évitant ainsi le processus de génération de données en double.
Le prototype de fonction est le suivant:
mixed apcu_entry ( string $key , callable $callback , int $ttl = 0 )
$ KEY : La clé mise en cache, identifiant uniquement les données mises en cache.
$ rappel : une fonction de rappel utilisée pour générer des données mises en cache. Si le cache n'existe pas, APCU exécutera la fonction de rappel pour générer des données.
$ ttl : le temps valide (en secondes) des données mises en cache. La valeur par défaut est 0 , ce qui signifie que le cache n'expirera jamais.
Dans APCU_ENTRY , le paramètre TTL est utilisé pour définir le temps valide du cache. Une fois le temps de validité expiré, le cache expirera et APCU régénérera les données mises en cache. En définissant TTL raisonnablement, nous pouvons nous assurer que les données mises en cache sont mises à jour dans le temps et éviter les problèmes causés par l'expiration du cache.
Supposons que nous ayons un résultat de requête de base de données qui nécessite un accès fréquent et que nous voulons le mettre en cache pendant 5 minutes (300 secondes). Vous pouvez utiliser APCU_ENTRY pour définir le temps valide du cache, comme indiqué ci-dessous:
<?php
// Supposons que ce soit une fonction qui interroge la base de données
function fetchDataFromDatabase() {
// Simuler l'obtention de données d'une base de données
return "This is the data fetched from the database!";
}
// utiliser apcu_entry Résultats de la requête en cache,Et régler le temps valide du cache sur 5 minute
$data = apcu_entry('database_data', 'fetchDataFromDatabase', 300);
// Résultats de requête de cache ou de base de données de sortie
echo $data;
?>
Dans cet exemple, lorsque APCU_ENTRY est appelé, s'il n'y a pas de données nommées 'Database_Data' dans le cache, APCU exécutera la fonction FetchDataFromDatabase pour obtenir les données et mettre en cache le résultat pendant 5 minutes. Si le cache est à nouveau demandé dans les 5 minutes, APCU renverra directement les données mises en cache.
Dans certains cas, les modifications des données peuvent ne pas correspondre à la date d'expiration du cache. Pour nous assurer que les données en cache sont toujours à jour, nous pouvons actualiser le cache par programme. Cela peut supprimer le cache en appelant APCU_DELETE au moment approprié, puis en régénérant le cache via APCU_ENTRY .
<?php
// Supposons que nous ayons besoin de rafraîchir le cache
if (someConditionToRefreshCache()) {
// Supprimer les vieilles données mises en cache
apcu_delete('database_data');
}
// Puis régénérer les données mises en cache
$data = apcu_entry('database_data', 'fetchDataFromDatabase', 300);
// Résultats de requête de cache ou de base de données de sortie
echo $data;
?>
Dans cet exemple, le cache ne sera rafraîchi manuellement que lorsqu'une certaine condition est remplie. Il s'agit d'une stratégie pour s'assurer que le contenu mis en cache est mis à jour en temps opportun.
Choisir le temps d'expiration du cache : il est très important de définir le temps d'expiration du cache approprié. Si l'heure de réglage est trop longue, les données peuvent ne pas être mises à jour pendant longtemps; Si le réglage est trop court, le cache peut être régénéré fréquemment, entraînant des pertes de performances.
Sécurité des threads : APCU_ENTRY lui-même est en filetage, mais dans un environnement de concurrence élevé, il est très essentiel de s'assurer que la fonction de rappel elle-même peut être exécutée en toute sécurité.