Aprendizaje de Redis (3) Mecanismo de persistencia, caché distribuida, caché multinivel, experiencia práctica de Redis

caché distribuido

Existe Redis de un solo nodo:

  • Problema de pérdida de datos: cuando un solo nodo deja de funcionar, se pierden datos.
  • Problemas de simultaneidad y capacidad de almacenamiento: la cantidad de simultaneidad que puede satisfacer un solo nodo y la cantidad de datos que se pueden almacenar son limitadas.
  • Problema de recuperación de fallas: si Redis deja de funcionar y el servicio no está disponible, se necesita un método automático de recuperación de fallas.

inserte la descripción de la imagen aquí

Persistencia de Redis

persistencia de RDB

RDB (archivo de copia de seguridad de la base de datos de Redis, archivo de copia de seguridad de la base de datos de Redis)

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Al comienzo de bgsave, el proceso principal se bifurcará para obtener el proceso secundario, y el proceso secundario compartirá los datos de la memoria del proceso principal. Una vez completada la bifurcación, los datos de la memoria se leerán y escribirán en el archivo RDB. . fork utiliza tecnología de copia en escritura:

  • Cuando el proceso principal realiza una operación de lectura, accede a la memoria compartida.
  • Cuando el proceso principal realiza una operación de escritura, se copia una copia de los datos y se realiza la operación de escritura.

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Persistencia AOF

El nombre completo de AOF es Append Only File (archivo adjunto). Cada comando de escritura procesado por Redis se registrará en el archivo AOF, que puede considerarse como un archivo de registro de comandos.

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Redis maestro-esclavo

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

Principio de sincronización de datos de Redis

sincronización completa

La primera sincronización entre los nodos maestro y esclavo adopta una sincronización completa, y el proceso de sincronización completa es el siguiente:

  • El nodo esclavo solicita sincronización incremental
  • El nodo maestro juzga la respuesta. Si la identificación es inconsistente y rechaza la sincronización incremental, la inconsistencia de la identificación indica que es la primera sincronización. El maestro devolverá la información de la versión de datos del maestro e intentará establecer una sincronización completa.
  • Una vez que el esclavo la recibe, guarda la información de la versión.
  • El nodo maestro ejecuta bgsave para generar un RDB. Todos los comandos durante la generación del RDB se guardarán en el repl-backlog y luego el archivo RDB se enviará al esclavo.
  • Después de que el esclavo recibe el archivo RDB, borra los datos locales y carga el archivo RDB enviado por el nodo maestro.
  • El nodo maestro posterior enviará el archivo repl-baklog y el esclavo ejecuta los comandos que contiene después de recibirlo para mantener los datos sincronizados con el maestro.

inserte la descripción de la imagen aquí

Sincronización incremental

La primera sincronización maestro-esclavo es una sincronización completa, pero si el esclavo se reinicia y sincroniza, realizará una sincronización incremental .
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Centinela de Redis

El papel y el principio del centinela.

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

¿Cuáles son las tres funciones del centinela?

  • monitor
  • conmutación por error
  • notificar

¿Cómo juzga Sentinel si una instancia de Redis está en buen estado?

  • Envíe un comando ping cada 1 segundo. Si no hay respuesta después de un cierto período de tiempo, se considera una conexión subjetiva
  • Si más de la mitad de los centinelas creen subjetivamente que la instancia está fuera de línea, se considera que el servicio está fuera de línea objetivamente.

Después de que el maestro falla, ¿cuál es el proceso de selección de un nuevo maestro?

inserte la descripción de la imagen aquí

¿Cuáles son los pasos para la conmutación por error?

  • Primero seleccione un esclavo como nuevo maestro, ejecute esclavo de nadie
  • Luego deje que todos los nodos ejecuten esclavo del nuevo maestro
  • Modifique la configuración del nodo defectuoso, agregue esclavo del nuevo maestro

Configure el modo centinela RedisTemplate en el proyecto

paso:

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

Clúster de fragmentos de Redis

Master-slave y Sentinel pueden resolver los problemas de alta disponibilidad y alta concurrencia, pero todavía quedan dos problemas que no se han resuelto:

  • Problema de almacenamiento masivo de datos.
  • El problema de la alta lectura y escritura concurrentes

inserte la descripción de la imagen aquí
Hay varios maestros en el clúster de fragmentación y cada maestro puede tener múltiples nodos esclavos. Los maestros monitorean el estado de salud de los demás a través de ping. En este momento, el mecanismo centinela ya no es necesario.

Ranura de hash de Redis

Redis asignará un nodo maestro a 0-16383 ranuras y la clave de los datos no está vinculada al nodo, sino a la ranura.

¿Cómo determina Redis en qué instancia debe estar una clave?

  • Asigne 16384 espacios a diferentes instancias.
  • Calcule el valor hash en función de la parte efectiva de la clave, tomando el resto de 16384.
  • El resto se utiliza como ranura, simplemente busque la instancia donde se encuentra la ranura.

¿Cómo guardar el mismo tipo de datos en la misma instancia de Redis?

  • Este tipo de datos utiliza la misma parte efectiva, por ejemplo, todas las claves tienen el prefijo {typeid}.

inserte la descripción de la imagen aquí

Escalado del clúster de Redis

El concepto de escalado de clúster es agregar y eliminar nodos dinámicamente.
inserte la descripción de la imagen aquí

Clúster de fragmentación de acceso a la configuración de RedisTemplate en el proyecto

inserte la descripción de la imagen aquí

Caché multinivel de Redis

El caché multinivel sirve para aprovechar al máximo cada enlace de procesamiento de solicitudes, agregar el caché por separado, reducir la presión sobre Tomcat y mejorar el rendimiento del servicio.

  • navegador, caché del cliente
  • Caché local de Nginx
  • caché de Redis
  • Caché de procesos Tomcat

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

caché de proceso JVM

inserte la descripción de la imagen aquí

Cafeína

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Caffeine implementa el caso de almacenamiento en caché de procesos locales

inserte la descripción de la imagen aquí
Paso 1:
cree una clase de configuración de caché y cree dos objetos Bean almacenados en caché:
inserte la descripción de la imagen aquí
Paso 2:
inyecte el objeto de caché donde se usa y escriba la consulta de caché y la lógica comercial de pérdida de caché.

inserte la descripción de la imagen aquí

Experiencia de combate de Redis

Diseño de valor clave de Redis

Estructura clave elegante

inserte la descripción de la imagen aquí

Resolver clave grande

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Elija el tipo de datos apropiado

Desmonte la tabla hash grande en tablas hash pequeñas:
inserte la descripción de la imagen aquíinserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

optimización por lotes

Mediante la ejecución por lotes, se reduce el tiempo de transmisión de la red.
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

tubería

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Procesamiento por lotes bajo el clúster

inserte la descripción de la imagen aquí
Redistemplate de Spring ya proporciona procesamiento por lotes en el grupo de ranuras paralelas.
inserte la descripción de la imagen aquí

Optimización del lado del servidor

configuración persistente

Aunque la persistencia de Redis puede garantizar la seguridad de los datos, también generará una gran sobrecarga adicional, así que siga las siguientes sugerencias para la persistencia:

  • La instancia de Redis utilizada para el almacenamiento en caché no debe permitir la persistencia tanto como sea posible, porque los datos para el almacenamiento en caché solo sirven para acelerar la velocidad de respuesta y la importancia no es tan alta. Pero para los datos utilizados para bloqueos distribuidos, se debe habilitar la persistencia para garantizar la seguridad de los datos.
  • Se recomienda desactivar la función de persistencia RDB y utilizar la persistencia AOF. Aunque la persistencia de RDB ocupa menos archivos y se restaura más rápido, puede ocurrir pérdida de datos durante el proceso de bifurcación de RDB y la generación de archivos RDB.
  • Utilice el script para realizar RDB periódicamente en el nodo esclavo para realizar una copia de seguridad de los datos .

inserte la descripción de la imagen aquí

consulta lenta

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

configuración de memoria

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/baiduwaimai/article/details/131711925
Recomendado
Clasificación