Caducidad y eliminación de datos de Redis
Redis eliminará las claves caducadas cuando encuentre una operación de obtención.
Procesamiento centralizado
Redis colocará la clave con el tiempo de vencimiento en un diccionario separado. El valor predeterminado es 10 escaneos de vencimiento por segundo. Modo de escaneo:
Para evitar que el tiempo de escaneo sea demasiado largo, el tiempo de escaneo está limitado a 25 ms. Durante el desarrollo, se debe evitar que una gran cantidad de claves caduquen al mismo tiempo.
La biblioteca esclava no se escaneará desactualizada. Cuando se elimina la biblioteca maestra, la instrucción del se agregará al archivo AOF para sincronizar con todas las bibliotecas esclavas, y la biblioteca esclava se eliminará mediante esta instrucción. Debido a que la sincronización de instrucciones es asincrónica, los datos maestro-esclavo serán inconsistentes.
Cuando la memoria de Redis excede el límite de memoria física, los datos de la memoria comenzarán a intercambiarse frecuentemente con el disco, lo que resultará en una fuerte disminución del rendimiento. Para limitar el uso de memoria, Redis proporciona el parámetro maxmemory para limitar la memoria máxima. Cuando se excede la memoria, se utilizará la siguiente política (maxmemory-policy) para eliminar claves y hacer espacio:
Dado que el algoritmo LRU requiere una gran cantidad de memoria adicional, redis utiliza un algoritmo LRU aproximado. Agrega un campo extra pequeño (24 bits) a cada clave, que es la marca de tiempo del último acceso. Cada vez que se realiza una operación de escritura, si se descubre que la memoria excede la memoria máxima, se seleccionan aleatoriamente 5 claves (configuradas por el parámetro maxmemory_samples) y luego se elimina la clave más antigua. Si el número aún se excede después de la eliminación, la eliminación aleatoria continuará hasta que no se exceda el número. Si maxmemory-policy es volatile-xxx, tome una muestra de las claves con vencimiento establecido; de lo contrario, tome una muestra de todas las claves.
Redis3.0 agrega un grupo de eliminación, que es una matriz con un tamaño de maxmemory_samples. En cada eliminación, una clave seleccionada al azar se fusionará con las claves de la matriz, se eliminará la clave más antigua y luego las claves más antiguas restantes se colocarán en el grupo de eliminación para el siguiente ciclo.
Eliminar redis del puede causar congestión al eliminar objetos grandes. Para resolver este problema, Redis 4.0 introdujo la instrucción de desvinculación, que elimina la referencia de objeto de esta clave de los datos de la memoria de Redis, encapsula la operación de eliminación en una tarea y la arroja a la cola asincrónica. Luego, un hilo asincrónico tomará la tarea de esta cola y la ejecutará.
Las operaciones de limpieza flushdb y flusall también se pueden ejecutar de forma asincrónica como se indicó anteriormente agregando async después de Redis 4.0.
Redis Deep Adventure: principios básicos y práctica de aplicación