TTL y expiración
Un tiempo de vida (TTL) es una duración que adjuntas a una clave y que le indica a Clustron Zaris cuánto debe existir la clave. Cuando el TTL transcurre, la clave se elimina automáticamente, de modo que obtienes una limpieza basada en el tiempo sin escribir ningún código de limpieza.
Qué significa TTL
El TTL define el tiempo de vida de una clave. Lo estableces como una duración cuando escribes la clave, y una vez que esa duración pasa la clave expira: se elimina y su valor deja de ser accesible. Nada en tu aplicación tiene que ejecutarse para que esto ocurra — la expiración es tarea del sistema.
Establecer un TTL
Adjuntas un TTL cuando almacenas un valor pasando las opciones de put construidas con Put.WithTtl:
await client.PutAsync(
"session:abc123",
"active",
Put.WithTtl(TimeSpan.FromMinutes(10)));
Esta clave existe durante 10 minutos desde la escritura, luego expira por sí sola.
Leer una clave que puede expirar
Un get sobre una clave que expira se parece a cualquier otra lectura. Lo que cambia es el resultado una vez que la clave ha desaparecido:
var result = await client.GetAsync<string>("session:abc123");
if (result.IsSuccess)
{
Console.WriteLine(result.Value);
}
Antes de que el TTL transcurra, IsSuccess es true y Value contiene tus datos. Después de que transcurra, IsSuccess es false, Status es KvStatus.NotFound, y la clave se comporta exactamente como si nunca hubiera existido. Comprueba siempre IsSuccess en lugar de asumir que la clave está presente, porque una expiración puede ocurrir entre una lectura y la siguiente.
Extender un TTL
Para restablecer el TTL de una clave in situ — sin reescribir su valor — llama a ExpireAsync con una duración nueva:
await client.ExpireAsync("session:abc123", TimeSpan.FromMinutes(10));
Esto da a la clave un nuevo tiempo de vida de 10 minutos desde el momento de la llamada, extendiéndola efectivamente. Volver a hacer put de la clave con Put.WithTtl también restablece su TTL, así que puedes extenderla de cualquiera de las dos formas; ExpireAsync es la opción más ligera cuando el valor no ha cambiado. Las aplicaciones mantienen vivos los datos de corta duración de esta forma — por ejemplo, refrescando el TTL de una sesión cada vez que el usuario actúa.
Dos llamadas complementarias completan la gestión del TTL: PersistAsync elimina el TTL de una clave y la hace permanente, y GetTimeToLiveAsync devuelve el tiempo de vida restante (o null cuando la clave no tiene TTL, y KvStatus.NotFound cuando la clave está ausente).
Cuándo usar TTL
El TTL encaja con cualquier dato que no deba vivir para siempre y que pueda descartarse una vez que está obsoleto. Los usos comunes son las sesiones y otro estado temporal, las cachés que se limpian solas, la invalidación basada en el tiempo, y el seguimiento de recursos de corta duración.
Cómo se comporta la expiración
La expiración es automática y no requiere limpieza manual — nunca escaneas y eliminas claves obsoletas tú mismo. Las claves expiradas se eliminan de forma consistente en todo el clúster, de modo que una clave que ha expirado no persiste en unos nodos y desaparece en otros.
En modo distribuido, el TTL se gestiona en todos los nodos y la expiración está coordinada, de modo que cada cliente observa el mismo comportamiento. Una clave que ha expirado se lee como ausente con independencia del nodo al que esté conectado un cliente.
El TTL controla los datos, no la propiedad
El TTL responde a una pregunta: ¿cuánto debe existir este dato? No rastrea quién es responsable de un recurso. Esa distinción importa en cuanto pasas de la caché a la coordinación.
Mantén el TTL y los leases en cubos mentales separados. El TTL controla el tiempo de vida de los datos — cuándo desaparece un valor. Un lease controla la propiedad de un recurso — quién es actualmente responsable de él — y libera esa propiedad automáticamente cuando el propietario deja de renovar. Cuando necesites "eliminar esto al cabo de un rato", recurre al TTL; cuando necesites "exactamente un propietario, y recuperarse si el propietario muere", recurre a un lease.
El TTL es tu primer contacto con la gestión del ciclo de vida. Clustron Zaris extiende la idea con los leases, que ligan la existencia de un recurso a un propietario, y con las primitivas de coordinación que reaccionan a los cambios de estado.