web-dev-qa-db-fra.com

Memcache temps maximum d'expiration de la clé

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?

41
cfischer

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.

49
Paul D. Waite

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

16
Eimantas

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.

10
Pierre

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

3
Umpa

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.

1
cfischer

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.

1
DanFromGermany

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é.

0
marlo