TTL et expiration
Un time-to-live (TTL) est une durée que vous attachez à une clé et qui indique à Clustron Zaris combien de temps la clé doit exister. Lorsque le TTL s'écoule, la clé est supprimée automatiquement, de sorte que vous obtenez un nettoyage basé sur le temps sans écrire aucun code de nettoyage.
Ce que signifie le TTL
Le TTL définit la durée de vie d'une clé. Vous le définissez comme une durée lorsque vous écrivez la clé, et une fois cette durée passée, la clé expire : elle est supprimée et sa valeur n'est plus accessible. Rien dans votre application n'a à s'exécuter pour que cela se produise — l'expiration est le travail du système.
Définir un TTL
Vous attachez un TTL lorsque vous stockez une valeur en passant des options de put construites avec Put.WithTtl :
await client.PutAsync(
"session:abc123",
"active",
Put.WithTtl(TimeSpan.FromMinutes(10)));
Cette clé existe pendant 10 minutes à compter de l'écriture, puis expire d'elle-même.
Lire une clé susceptible d'expirer
Un get sur une clé expirable ressemble à n'importe quelle autre lecture. Ce qui change, c'est le résultat une fois la clé disparue :
var result = await client.GetAsync<string>("session:abc123");
if (result.IsSuccess)
{
Console.WriteLine(result.Value);
}
Avant que le TTL ne s'écoule, IsSuccess vaut true et Value contient vos données. Après son écoulement, IsSuccess vaut false, Status vaut KvStatus.NotFound, et la clé se comporte exactement comme si elle n'avait jamais existé. Vérifiez toujours IsSuccess plutôt que de supposer que la clé est présente, car une expiration peut survenir entre une lecture et la suivante.
Prolonger un TTL
Pour réinitialiser le TTL d'une clé en place — sans réécrire sa valeur — appelez ExpireAsync avec une nouvelle durée :
await client.ExpireAsync("session:abc123", TimeSpan.FromMinutes(10));
Cela donne à la clé une nouvelle durée de vie de 10 minutes à compter du moment de l'appel, la prolongeant de fait. Réécrire la clé avec Put.WithTtl réinitialise également son TTL, de sorte que vous pouvez la prolonger de l'une ou l'autre façon ; ExpireAsync est l'option plus légère lorsque la valeur n'a pas changé. Les applications maintiennent ainsi en vie des données à courte durée de vie — par exemple en rafraîchissant le TTL d'une session chaque fois que l'utilisateur agit.
Deux appels compagnons complètent la gestion du TTL : PersistAsync retire le TTL d'une clé et la rend permanente, et GetTimeToLiveAsync renvoie le temps de vie restant (ou null lorsque la clé n'a pas de TTL, et KvStatus.NotFound lorsque la clé est absente).
Quand utiliser le TTL
Le TTL convient à toute donnée qui ne devrait pas vivre éternellement et peut être jetée une fois périmée. Les usages courants sont les sessions et autres états temporaires, les caches qui se nettoient eux-mêmes, l'invalidation basée sur le temps et le suivi de ressources à courte durée de vie.
Comment se comporte l'expiration
L'expiration est automatique et ne requiert aucun nettoyage manuel — vous ne balayez jamais vous-même pour supprimer les clés périmées. Les clés expirées sont supprimées de façon cohérente dans tout le cluster, de sorte qu'une clé qui a expiré ne persiste pas sur certains nœuds pour disparaître sur d'autres.
En mode distribué, le TTL est géré sur l'ensemble des nœuds et l'expiration est coordonnée, de sorte que chaque client observe le même comportement. Une clé qui a expiré se lit comme absente quel que soit le nœud auquel un client est connecté.
Le TTL contrôle les données, pas la propriété
Le TTL répond à une seule question : combien de temps cette donnée doit-elle exister ? Il ne suit pas qui est responsable d'une ressource. Cette distinction compte dès lors que vous passez du cache à la coordination.
Gardez le TTL et les baux dans des cases mentales séparées. Le TTL contrôle la durée de vie des données — quand une valeur disparaît. Un bail contrôle la propriété d'une ressource — qui en est actuellement responsable — et libère cette propriété automatiquement lorsque le propriétaire cesse de la renouveler. Lorsque vous avez besoin de « supprimer ceci au bout d'un moment », tournez-vous vers le TTL ; lorsque vous avez besoin de « exactement un propriétaire, avec récupération si le propriétaire meurt », tournez-vous vers un bail.
Le TTL est votre premier aperçu de la gestion du cycle de vie. Clustron Zaris étend l'idée avec les baux, qui lient l'existence d'une ressource à un propriétaire, et avec des primitives de coordination qui réagissent aux changements d'état.