Quelle est la date d'expiration maximale de la clé memcached?
Si je ne fournis pas d'heure d'expiration et que le cache est plein, que se passe-t-il?
Vous pouvez définir une date d'expiration de clé en fournissant un horodatage Unix au lieu d'un nombre de jours. Cette date peut être supérieure à 30 jours dans le futur:
Les délais d'expiration sont spécifiés en secondes non signées. Ils peuvent être définis de 0 à "jamais expirer" à 30 jours (60 * 60 * 24 * 30). Toute heure supérieure à 30 jours est interprétée comme une date d’horodatage Unix. Si vous souhaitez faire expirer un objet le 1er janvier de l'année prochaine, procédez comme suit.
https://github.com/memcached/memcached/wiki/Programming#expiration
Mais, comme vous le dites , si vous définissez l’expiration d’une clé sur une durée plutôt que sur une date, le maximum est de 2 592 000 secondes ou 30 jours.
Si vous ne fournissez pas d'expiration et que le cache est plein, les valeurs-clés les plus anciennes sont expirées en premier:
La mémoire est également récupérée lorsqu'il est temps de stocker un nouvel élément. S'il n'y a pas de morceaux libres ni de pages libres dans la classe de dalles appropriée, memcached regardera à la fin de la LRU pour qu'un élément soit "récupéré". Il recherchera les derniers éléments de la liste des éléments déjà expirés et pourra donc être réutilisés. S'il ne parvient pas à trouver un élément expiré, il en "expulse" un qui n'a pas encore expiré. Ceci est ensuite noté dans plusieurs compteurs statistiques
https://github.com/memcached/memcached/wiki/UserInternals#when-are-items-evicted
Non, il n'y a pas de limite. La limite de 30 jours est si vous donnez le nombre de secondes qu'il devrait y rester, mais si vous donnez un horodatage, seule la valeur max long ou int sur la machine peut constituer une limite.
->set('key', 'value', time() + 24*60*60*365)
obligera la clé à y rester pendant un an, mais si le cache est saturé ou redémarré entre les deux, cette valeur peut être supprimée.
Un délai d'expiration, en secondes. Peut durer jusqu'à 30 jours. Après 30 jours, est traité comme un horodatage Unix d'une date exacte.
https://code.google.com/p/memcached/wiki/NewCommands#Standard_Protocol
D'accord, j'ai découvert que le nombre de secondes ne devait pas dépasser 2592 000 (30 jours). Le délai d’expiration maximal est donc de 30 jours.
On dirait que certaines réponses ne sont plus valables.
J'ai découvert qu'une clé n'était pas du tout configurée lorsque le TTL était trop élevé Par exemple 2992553564
.
Testé avec le code PHP suivant:
var_dump($memcached->set($id, "hello", 2992553564); // true
var_dump($memcached->get($id)); // empty!
var_dump($memcached->set($id, "hello", 500); // true
var_dump($memcached->get($id)); // "hello"
La version est memcached 1.4.14-0ubuntu9
.
Sur laravel config.session.lifetime
, le paramètre qui, s'il est défini pour être équivalent à 30 jours ci-dessus, sera considéré comme un horodatage (cela donnera une erreur de token mismatch
à chaque fois en supposant que memcached
est utilisé).
Pour répondre, l’expiration de memcached peut être définie à tout moment. (Le paramètre par défaut de Laravel (sur la v5.0) vous fixera un horodatage déjà expiré). Si vous ne l'avez pas défini, le défaut sera utilisé.