En general, un caché es un componente de software o hardware que contiene datos de solicitudes de clientes anteriores, de modo que los datos se puedan recuperar y atender más rápido para las solicitudes realizadas en el futuro. En la mayoría de los casos, los sistemas de backend no son tan rápido como le gustaría que sean. El caché se encuentra entre su capa de base de datos de back -end y la aplicación del cliente, proporcionando una recuperación rápida de datos y un tiempo de respuesta rápido.
Cuando los datos solicitados están disponibles en el caché redis, los datos se pueden atender directamente desde el caché redis sin redirigir la solicitud a la base de datos primaria, que se denomina hit de caché. Por otro lado, si los datos no están disponibles en el caché redis, la solicitud debe llegar a la base de datos de back -end original para obtener los datos como de costumbre, que es una falla de caché, pero las solicitudes posteriores servirán desde el caché del caché.
Con este tipo de comportamiento, el almacenamiento en caché de Redis es una excelente opción para muchos casos de uso.
Redis Caches trae su aplicación varios beneficios al presentar un desafío importante, que se llama acalidez de caché. En algún momento, su caché podría estar lleno de datos obsoletos que ni siquiera son válidos para hoy. Por lo tanto, debe haber un mecanismo para desalojar los datos antiguos o no válidos a medida que continúa utilizando su caché redis con nuevos datos.
Desalojo de caché redis
Cuando Redis Cache se introdujo por primera vez, los desarrolladores estaban utilizando el valor TTL (tiempo de vida) para cada clave para mantener una cantidad relativamente constante de memoria al igualar la velocidad de los datos que entran y salen del sistema. Este fue mucho trabajo manual para los desarrolladores, que es algo que el servidor Redis debería manejar.
Por lo tanto, el enfoque ideal debe ser expulsar automáticamente los datos antiguos a medida que se alcanza el límite de memoria de caché máximo, que también es el proceso seguido por el sistema Memcached. Redis usa el especial maxmemoria Directiva para notificar que se ha alcanzado el límite de memoria máximo.
Directiva de configuración de MaxMemory
Redis utiliza la Directiva de configuración de MaxMemory para identificar la memoria máxima disponible para que el caché funcione en. Hay dos formas en que puede establecer el valor de la Directiva MaxMemory.
El siguiente es un ejemplo de un redis.Archivo conf que muestra cómo puede especificar la memoria de caché máxima para el conjunto de datos. En este caso, la Directiva MaxMemory se ha establecido en 1000 bytes.
Del mismo modo, el comando Redis Config Set se puede usar para establecer la Directiva MaxMemory en tiempo de ejecución, como se muestra en lo siguiente.
config set maxMemory 100
Además, si establece el valor de la Directiva MaxMemory en 0, significa que no se ha especificado un límite de memoria para el caché redis. En la mayoría de los sistemas de 64 bits, este valor se establece en 0. El sistema de 32 bits utiliza el límite de memoria máxima de 3GB implícitamente.
Cuando el caché Redis llega al valor de memoria especificado por la Directiva MaxMemory, comienza a eliminar las claves de acuerdo con la política de desalojo seleccionado. Si ninguna clave cumple con los criterios de la política, entonces nada será desalojado. En su lugar, el servidor Redis responderá con errores a comandos como LPUSH y establece que consume más memoria y responda solo a comandos de solo lectura como GET.
En la siguiente sección, discutiremos las políticas de desalojo de redis y cómo determinan qué claves deben ser desalojadas o no.
Políticas de desalojo
Una política de desalojo determina el comportamiento del caché redis cuando se alcanza el valor maxMemory. Redis eliminará todas las claves que cumplan con los criterios de política dados en un momento determinado. Por lo tanto, es importante asegurarse de tener una base de datos lo suficientemente grande como para mantener las claves deseadas. Las siguientes secciones describen las diferentes políticas de desalojo de redis disponibles para su uso.
noevicción
Varias políticas de desalojo están disponibles para usar, y noevicción es uno de los más utilizados si no desea eliminar las teclas viejas cuando se alcanza el límite de memoria máximo. Sin embargo, lanzará errores en todas las operaciones de redis redis para notificar al usuario que el caché está lleno y liberar algo de espacio. En resumen, los datos no se guardarán en el caché hasta que libere algo de espacio manualmente.
ttl volátil
En el ttl volátil Política, Redis toma muestras de claves cuyos campos de caducidad se establecen en verdad y desalojan las que tienen el valor TTL más pequeño. Si no hay claves con el campo expirar establecido en verdadero, entonces no ocurre ningún desalojo, que es similar al noevicción política.
cría volátil
Esta es otra versión de la política Volatile-TTL donde Redis elimina al azar las claves cuyo campo de caducidad se establece en verdadero. Nuevamente, considera solo las teclas que tienen un valor TTL pero no todo el espacio clave.
Allkeys-sandom
Esto es más similar al cría volátil política, pero con el Allkeys-sandom Política, se considerará todo el espacio clave, no solo las claves con un valor TTL. En este caso, Redis desalojará a las claves al azar para agregar nuevos datos.
Ambas políticas anteriores usan un algoritmo aleatorio para desalojar las claves del caché, que es bastante arriesgado y puede no ser la forma óptima de hacer el desalojo clave. Entonces, Redis introdujo una forma más óptima de hacer esto con el nuevo LRU (menos usado recientemente) algoritmo.
El algoritmo LRU (menos usado recientemente)
El algoritmo LRU se basa en el supuesto de que si se ha accedido a una clave determinada recientemente, existe una mayor probabilidad de acceder a él nuevamente en el futuro cercano. Por otro lado, si no hemos usado una clave determinada durante mucho tiempo, existe una mayor posibilidad de que la clave no se use pronto o nunca más. Con esa suposición, el algoritmo LRU intenta desalojar las claves menos utilizadas de Redis Cache, que es un enfoque más óptimo que los algoritmos de desalojo de clave aleatoria.
Para implementar esta política, el objeto redis utiliza un nuevo LRU campo con 24 bits asignados, que realizan un seguimiento de cuándo se usó la clave por última vez. Con el algoritmo LRU en su lugar, toma un número especificado de claves aleatorias y desalienta la que tiene el tiempo de inactividad más alto o el tiempo de acceso más antiguo. La directiva MaxMemory-Samples se utiliza para especificar el número de claves por muestra. Esto se puede configurar utilizando el comando config set, como se muestra en el siguiente.
config establecer maxMemory-samples 5
Es importante tener en cuenta que Redis ejecuta una aproximación del algoritmo LRU para mantener las cosas simples y ahorrar recursos informáticos como CPU y memoria.
Hay dos sabores de la política de desalojo de LRU.
volátil-lru
Se eliminarán las claves menos utilizadas con el campo expire establecido en True. Las claves que no están asociadas con un valor TTL no serán desalojadas bajo esta política porque la muestra se toma solo de las claves cuyo campo de caducidad se establece en verdadero.
Allkeys-lru
Todas las llaves con el tiempo de inactividad más alto se eliminarán. En este caso, Redis mantendrá las claves más recientemente utilizadas.
El algoritmo LFU (menos utilizado)
Redis introdujo el nuevo algoritmo LFU (menos utilizado con frecuencia) en la versión 4.0 para identificar claves raramente usadas y retirarlas del caché cuando se alcanza el límite de memoria máxima. Con la política de LFU, las claves a las que se accede con demasiada frecuencia permanecerán.
volátil-lfu
Las claves con los campos de caducidad establecidos en True y los que se usan menos frecuentemente entre la muestra seleccionada serán desalojadas.
Allkeys-lfu
Busca en todo el espacio de llaves para las teclas raramente usadas y las elimina mientras mantiene las teclas usadas frecuentemente.
Conclusión
Para concluir, Redis usa la Directiva MaxMemory para especificar el límite de memoria máximo del caché de Redis. Como se discutió, cuando el caché alcanza su límite de memoria máximo, la política de desalojo configurada disparará y eliminará las claves. Redis utiliza las aproximaciones de los algoritmos LRU y LFU para encontrar los mejores candidatos para el desalojo.