web-dev-qa-db-fra.com

Définir l'expiration transitoire

J'ai une page qui affiche un message au hasard tous les jours. Pour changer de poste toutes les 24 heures, j'utilise

set_transient('totd_trans_post_id', $totd[0]->ID, (60*60*24));

Ce que je me demande c'est ceci:

  • Le compte à rebours (60 * 60 * 24) commence-t-il dès que j'ai inséré et enregistré le code?
  • Si oui: que se passe-t-il si je laisse le code s'exécuter pendant 23 heures et décide ensuite de le "mettre à jour"? Le compte à rebours va-t-il recommencer?
  • Si personne ne visite le site pendant 48 heures, l'expiration aura-t-elle encore lieu? Ou est-ce que quelqu'un doit rendre visite après 24 heures pour "l'exécuter"?
1
Tony Fire
  1. Le compte à rebours commence dès que le transitoire est créé ou mis à jour.

  2. L'exécution de set_transient() sur une valeur transitoire existante redémarrera l'horloge. Pour la page Codex sur set_transient() :

    Si un transitoire existe, cette fonction met à jour le délai d'expiration du transitoire.

  3. Selon la page de l'API transitoire , le délai d'expiration correspond à la durée de vie maximale d'une valeur transitoire. Il peut être supprimé avant que le temps ne soit écoulé , mais il ne renverra jamais sa valeur une fois le temps écoulé:

    Les transitoires peuvent expirer avant la date d'expiration $ (en raison de caches d'objets externes ou de mises à niveau de la base de données), mais ne renverront jamais leur valeur après la date d'expiration $.

3
Pat J

Pour ajouter à la réponse de @ pat, il n'y a pas de compte à rebours , la valeur time représente la durée maximale pendant laquelle la valeur stockée sera prise en compte " frais ", et après ce temps il deviendra" fade "et ignoré. Il n'y a pas de compte à rebours actif ni de purge active du DB/de la mémoire. Cela peut sembler sémantique, mais cela peut devenir important si vous avez généré de nombreux transitoires, car ils ne se supprimeront pas automatiquement de la base de données.

3
Mark Kaplun