Red de conocimiento informático - Problemas con los teléfonos móviles - Tiempo de espera de vencimiento del tutorial oficial de Redis

Tiempo de espera de vencimiento del tutorial oficial de Redis

Expirar segundos de la tecla

Establecer una clave de tiempo de espera. Después del tiempo de espera, la clave se eliminará automáticamente. En la terminología de Redis, una clave con un tiempo de espera generalmente se considera inestable.

Sólo los comandos que eliminan o sobrescriben el contenido de una clave (incluidos DEL, SET, GETSET y todos los comandos *STORE) pueden borrar el tiempo de espera. Esto significa que todas las operaciones que cambien el valor almacenado en una clave sin reemplazarlo con una nueva clave dejarán el tiempo de espera sin cambios. Por ejemplo, agregar un valor INCR a una clave, insertar un nuevo valor en una lista (incluido LPUSH) o cambiar el valor de un campo en un hash (HSET) no cambiará el tiempo de espera.

También puede borrar el tiempo de espera y utilizar el comando PERSIST para convertir la clave nuevamente en una clave persistente.

Si cambia el nombre de una clave usando el comando RENAME, la vida útil asociada se transferirá al nuevo nombre de clave.

Si RENAME sobrescribe una clave, por ejemplo, ya existe una clave Key_A, que se sobrescribe con el siguiente comando RENAME Key_B Key_A, la nueva clave Key_A heredará todas las propiedades de Key_B, independientemente de si la Key_A original tiene un tiempo de espera.

Tenga en cuenta que llamar a EXPIRE/PEXPIRE con un tiempo de espera sin reenvío o EXPIREAT/PEXPIREAT con un tiempo de espera hará que la clave se elimine en lugar de caducar (por lo que el evento de clave emitido será del, no caducará). .

EXPIRE se puede invocar como argumento de una clave con un tiempo de espera establecido. En este caso, la vida útil de la clave se actualiza al nuevo valor. Esto tiene muchas aplicaciones útiles, un ejemplo de las cuales está documentado en la sección Navegación del modo de sesión a continuación.

En versiones anteriores de Redis 2.1.3, usar la clave de cambio de comando para cambiar un conjunto de claves con un tiempo de espera tenía el efecto de eliminar completamente la clave. Esta semántica es necesaria debido a una limitación en la capa de replicación que ahora está solucionada.

EXPIRE devuelve 0 y no cambia el tiempo de espera para las claves que tienen un tiempo de espera establecido.

Respuesta entera, como se muestra a continuación:

Supongamos que tiene un servicio web y necesita realizar un seguimiento de las N páginas que el usuario ha navegado recientemente y el tiempo de navegación de cada una adyacente. La página no supera los 60 segundos.

Puedes lograr esto fácilmente usando redis ejecutando el siguiente comando cada vez que el usuario abre la página:

Si el usuario no hace nada durante 60 segundos, entonces la página se eliminará. y sólo se eliminará después de 60 segundos.

Normalmente, una clave de Redis se crea sin un tiempo de vencimiento asociado y la clave existirá para siempre a menos que el usuario la elimine explícitamente (por ejemplo, usando el comando DEL).

La serie de comandos EXPIRE puede establecer el tiempo de caducidad de la clave, pero requiere un costo de memoria adicional.

Los comandos EXPIRE y PERSIST (u otros comandos estrictamente relacionados) se pueden utilizar para actualizar o eliminar la vida útil de una clave.

En Redis 2.4, la caducidad puede no ser precisa y el error puede estar entre 0 y 1 segundo.

A partir de Redis 2.6, el rango de error de caducidad está entre 0 y 1 milisegundos.

La información de vencimiento de la clave se almacena como una marca de tiempo absoluta de Unix (en milisegundos en Redis 2.6 o posterior). Esto significa que el tiempo fluye incluso cuando la instancia de Redis no está activa.

Para que el tiempo de vencimiento sea válido, el tiempo del ordenador debe ser estable. Si mueve los archivos RDB de dos temporizadores y utiliza una gran desincronización en sus relojes, pueden suceder algunas cosas interesantes (por ejemplo, todas las claves cargadas al cargar expirarán al cargar).

Incluso las instancias en ejecución verifican el reloj de la computadora; por ejemplo, si configura el período de validez de una clave en 1000 segundos y luego establece la hora de la computadora 2000 segundos atrás respecto de la hora actual, entonces la clave caducará inmediatamente en lugar de durar. 1000 segundos.

Hay dos formas de caducidad de la clave de Redis: caducidad pasiva y caducidad activa.

Cuando un cliente intenta acceder a la clave y se descubre que se ha agotado el tiempo de espera, la clave caducará pasivamente.

Por supuesto, esto no es suficiente, ya que nunca más se podrá acceder a las claves caducadas. Estas claves deberían caducar de todos modos, por lo que Redis probará periódicamente algunas al azar entre las claves caducadas.

Específicamente, Redis realizará esta operación 10 veces por segundo:

Este es un algoritmo probabilístico simple que básicamente supone que nuestra muestra representa todo el espacio de claves, y continuaremos caducando. hasta que la proporción de claves que pueden caducar sea inferior a 25

Esto significa que el número máximo de claves caducadas que utilizan la memoria en un momento dado es como máximo igual al número máximo de operaciones de escritura por segundo Dividir por 4 .

Para obtener el comportamiento correcto sin sacrificar la coherencia, sintetizamos una operación DEL en el archivo AOF y notificamos a todos los nodos de réplica cuando la clave expiró. De esta forma, el proceso de caducidad se concentra en la instancia maestra y no se producirán errores de coherencia.

Sin embargo, los nodos de réplica conectados al maestro no caducarán las claves individualmente (sino que esperarán a DEL del maestro), pero aún adoptarán el estado de caducidad completo presente en el conjunto de datos, por lo que cuando se produzca un Cuándo Si se selecciona una réplica como maestra, podrá hacer caducar las claves de forma independiente, actuando como una maestra completa.