Preparación de la entrevista: resumen de las preguntas comunes de la entrevista de Redis

1. Introduce Redis

Redis está escrito en C usando un alto rendimiento de base de datos clave-valor .

Caracteristicas:

  • Rendimiento extremadamente alto , hasta 100,000 veces / s de velocidad de lectura y escritura
  • Admite la persistencia de datos, utiliza la tecnología de copia en escritura para actualizar los datos , se puede guardar en el disco de forma asincrónica
  • Tipos de datos enriquecidos, Cadena (cadena), Lista (lista), Hash (diccionario), Conjunto (colección), Conjunto ordenado (colección ordenada)
  • Atomicidad : todas las operaciones de Redis son atómicas, y múltiples operaciones admiten transacciones a través de instrucciones MULTI y EXEC
  • Funciones completas: caducidad de claves, publicación / suscripción, notificación
  • Soporte de copia de seguridad de datos, replicación rápida maestro-esclavo
  • Clúster de nodos, es fácil distribuir datos a múltiples instancias de Redis
  • Subproceso único : evite el cambio de contexto innecesario y las condiciones de carrera

Propósito:
caché.
Cerradura distribuida.
Inicio de sesión único sesión compartida.
Contador

2. ¿Por qué es tan rápido Redis?

1. Está completamente basado en la memoria , y la mayoría de las solicitudes son puramente operaciones de memoria, que son muy rápidas. Los datos se almacenan en la memoria, similar a HashMap, la ventaja de HashMap es que la complejidad de tiempo de búsqueda y operación es O (1);

2. La estructura de datos es simple y eficiente, como Hash, tabla de salto, etc.

3. El uso de un solo subproceso evita el cambio innecesario de contexto y las condiciones de carrera , y no hay un multiproceso o multiproceso que consuma CPU. No hay necesidad de considerar los problemas de varios bloqueos. No hay operación de liberación de bloqueo, no Consumo de rendimiento debido a un posible punto muerto;

4. Utilice el modelo de multiplexación de E / S múltiple, IO sin bloqueo ;

5. El modelo subyacente es diferente. La implementación subyacente y el protocolo de aplicación para la comunicación con el cliente son diferentes. Redis construye directamente el mecanismo VM por sí mismo . Si el sistema general llama a la función del sistema, perderá algo de tiempo en moverse Y solicitud;

3. ¿Qué tipos de datos admite Redis?

Redis admite cinco tipos de datos

cadena:
hash de cadena :
lista hash :
conjunto de lista : conjunto conjunto
ordenado: conjunto ordenado

4. ¿Cuál es la diferencia entre Redis y Memcached?

No lo hagas por ahora.

5. ¿Qué es la mesa de salto Redis?

La tabla de omisión se basa en una lista ordenada individualmente vinculada. Sobre la base de la lista vinculada, cada nodo contiene no solo un puntero, sino también múltiples punteros a los nodos posteriores, de modo que se pueden omitir algunos nodos innecesarios, acelerando así la búsqueda , Eliminar y otras operaciones.
Inserte la descripción de la imagen aquí

6. ¿Cuál es la separación de datos calientes y fríos? ¿Qué es un mecanismo VM?

Redis usa VM, que puede separar datos calientes y fríos a través de la función VM. Mantenga los datos calientes en la memoria y guarde los datos fríos en el disco. De esta manera, se puede evitar el problema de la velocidad de acceso reducida debido a la memoria insuficiente.

Los datos en frío son información a la que se accede con poca frecuencia pero que no se puede eliminar.

7. ¿Cuáles son las estrategias de eliminación para las claves caducadas de Redis?

Eliminar de forma diferida : no elimine activamente las claves caducadas. Cuando obtenga claves del espacio de claves, verifique si las claves obtenidas están vencidas y elimine las claves vencidas; si no caducan, vuelva a
la eliminación regular : revise la base de datos a intervalos regulares para eliminar las claves vencidas Clave El algoritmo determina cuántas claves caducadas se eliminan y cuántas bases de datos se comprueban.

Referencia: arquitectura de Java express train-Redis caché procesamiento de caducidad y mecanismo de eliminación de memoria

8. ¿Cuéntame sobre el mecanismo de sincronización de Redis?

Antes de la versión 2.8

Redis completa la sincronización a través de dos operaciones, sincronización y propagación de comandos

Sincronización (sincronización): actualice el estado de la base de datos del nodo esclavo para que sea coherente con el estado de la base de datos del nodo maestro

El nodo esclavo envía la instrucción SYNC al nodo maestro. Después de
recibir la instrucción SYNC, el nodo maestro ejecuta la instrucción BGSAVE, genera un archivo RDB en segundo plano y utiliza un búfer para registrar todas las instrucciones de escritura ejecutadas a partir de ahora.
Después de ejecutar la instrucción BGSAVE del nodo maestro, se generará El archivo RDB se envía al nodo esclavo. El
nodo esclavo recibe y carga el archivo RDB, actualiza el estado de la base de datos al estado de la base de datos cuando el nodo maestro ejecuta la instrucción BGSAVE. El
nodo esclavo termina de cargar el archivo RDB y notifica al nodo maestro para registrar todas las instrucciones de escritura en el búfer. Enviar al nodo esclavo, el nodo esclavo ejecuta estas instrucciones de escritura para actualizar el estado de la base de datos al estado actual de la base de datos del nodo maestro

Propagación de comando: los datos del nodo maestro se modifican y enviará activamente el comando de escritura ejecutado al nodo esclavo. Después de que el nodo esclavo se ejecuta, el estado de los datos de los dos nodos permanece constante

Para resolver el problema de la replicación ineficiente de la desconexión del nodo maestro-esclavo (la generación, transferencia y carga de archivos RDB durante el proceso SYNC consume una gran cantidad de recursos de CPU, memoria y disco IO), la instrucción PSYNC se agregó en la versión 2.8.

PSYNC tiene dos modos

Resincronización completa, que es básicamente lo mismo que el proceso SYNC.
Resincronización parcial. Con la ayuda de la compensación de replicación, el búfer de reserva de replicación y la ID de operación del servidor, después de que el nodo maestro-esclavo se desconecta, el nodo esclavo se vuelve a conectar al maestro Después del nodo, las condiciones lo permiten, el nodo maestro envía el comando de escritura ejecutado durante la desconexión al nodo esclavo, el nodo esclavo recibe y ejecuta el comando de escritura y actualiza la base de datos al estado actual del nodo maestro

9. ¿Cuáles son los beneficios de Pipeline?

No hay dependencia entre múltiples instrucciones, puede usar la canalización para ejecutar múltiples instrucciones a la vez, reduciendo las E / S y acortando el tiempo.

10. ¿Redis implementa bloqueos distribuidos?

Referencia: arquitectura Java express train-Set NX basado en Redis para lograr el bloqueo distribuido

11. ¿Redis es idempotente?

Cree un token de identificación único para cada solicitud que necesite garantizar la idempotencia, primero obtenga el token y almacene el token en redis, cuando solicite la interfaz, coloque este token en el encabezado o la interfaz de solicitud como parámetro de solicitud, la interfaz de fondo juzga redis ¿Existe este token en:

Si existe, procese la lógica de negocios normalmente y elimine el token de redis. Luego, si se trata de una solicitud repetida, porque el token ha sido eliminado, no puede pasar la verificación. Regrese al recordatorio de no repetir la operación.

12. ¿Con qué clientes de Redis ha contactado?

Redisson

Ventajas:

Tenga en cuenta las características distribuidas y la estructura de datos escalable de Java, adecuada para el desarrollo distribuido
API seguridad de subprocesos
La comunicación dirigida por eventos basada en el marco de Netty, se puede llamar asincrónicamente
Desventajas:

La API es más abstracta, el costo de aprendizaje y uso es alto

Jedis

Ventajas:

Redis proporciona un enfoque más integral características operativas de la API
API instrucciones básicas corresponden con Redis, fácil de usar y fácil de entender
Contras:

El bloqueo síncrono IO
no admite
subprocesos asincrónicos inseguros

Lechuga

Ventajas:

Seguridad de subprocesos
Comunicación basada en eventos basada en el marco Netty, que se puede llamar asíncronamente
Aplicable a la caché distribuida
Desventajas:

La API es más abstracta, el costo de aprendizaje y uso es alto

13. Redis hash slot?

El clúster Redis no utiliza hashing coherente, pero introduce el concepto de ranuras hash.

El clúster Redis tiene 16384 ranuras hash, y cada clave se calcula mediante el algoritmo CRC16. Después del módulo 16384, se coloca en la ranura hash correspondiente entre 0-16383. Cada nodo del clúster es responsable de una parte de la ranura hash.

14. ¿El clúster Redis perderá operaciones de escritura?

Las siguientes condiciones pueden hacer que se pierda la operación de escritura:

La clave expirada se borra. La
memoria máxima es insuficiente, lo que hace que Redis borre automáticamente algunas claves para ahorrar espacio. La
biblioteca maestra se reinicia automáticamente después de un fallo, y la biblioteca esclava sincroniza automáticamente las
soluciones maestras y de respaldo separadas. La red inestable activa el centinela para cambiar automáticamente los nodos maestro y esclavo. Pérdida de datos

15. ¿Cómo asegurarse de que todos los datos activos almacenados en Redis?

Cuando los datos almacenados en Redis alcanzan el tamaño configurado, los datos se eliminan

Use la estrategia allkeys-lru para seleccionar los datos usados ​​menos recientemente del conjunto de datos (server.db [i] .dict) para deshacerse de ellos primero, lo que puede satisfacer la necesidad de guardar datos calientes

16. ¿Penetración de la caché, avería, avalancha?

Referencia: Java Architecture Express Train-Redis penetración de caché / desglose / avalancha

17. ¿Clave de punto de acceso?

El valor de algunas claves en el caché (tal vez para la aplicación y un elemento promocional) se almacena en una máquina en el clúster, de modo que todo el tráfico fluya a la misma máquina, lo que se convierte en el cuello de botella del sistema. El desafío de este problema es que no puede Capacidad de resolver. (Cuando la clave falla, una gran cantidad de subprocesos crean caché, lo que resulta en una mayor carga)

Solución:

  1. Caché de clave de zona activa del cliente: guarde en caché la clave de zona activa correspondiente al valor local en el cliente y establezca un tiempo de vencimiento. Para cada solicitud de lectura, primero verificará si la clave existe en el caché local, si existe, luego regresará directamente, si no, luego accederá a la máquina de caché distribuida.
  2. Disperse la clave de punto de acceso en varias subclaves y almacénelas en diferentes máquinas en el clúster de caché. Los valores correspondientes a estas subclaves son los mismos que la clave de punto de acceso. Cuando se consultan datos por clave de punto de acceso, se selecciona aleatoriamente una subclave a través de un cierto algoritmo hash, y luego se accede a la máquina de caché para extender el punto de acceso a múltiples subclaves.
  3. Establezca un tiempo de vencimiento lógico para cada valor. Cuando se encuentra que el tiempo de vencimiento lógico se ha excedido, se usará un hilo separado para construir el caché. No hay un tiempo de caducidad establecido en la capa de caché (esta solución puede resolver el problema de una gran cantidad de subprocesos en espera, pero puede causar el problema de datos inconsistentes)
  4. Para el fallo de la tecla de acceso rápido, un gran número de subprocesos crea una memoria caché (el uso de bloqueos distribuidos, solo un subproceso para generar la memoria caché, puede resolver este problema).

18. 大 Clave (Big Key)?

Durante el uso de Redis, a menudo hay varias teclas grandes, por ejemplo, una sola tecla simple almacena un valor grande.
Dado que redis se ejecuta en un solo subproceso, si el valor de una operación es grande, el tiempo de respuesta de todo el redis se verá afectado negativamente, causando congestión de red IO.

Resolver:

Divida los objetos grandes que se almacenan y recuperan en múltiples objetos pequeños. Puede intentar dividir el objeto en varios valores clave y usar multiGet para obtener el valor. La importancia de la división es dividir la presión de una sola operación, extender la presión de operación a múltiples instancias de redis y reducir el IO de un solo redis Influencia

19. ¿El problema del agujero sin fondo?

No entiendo por ahora.

20. Caché y problemas de consistencia de la base de datos?

Referencia: Arquitectura de caché
Referencia: DB distribuida y coherencia de caché

Publicado 431 artículos originales · elogiados 329 · 170,000 visitas

Supongo que te gusta

Origin blog.csdn.net/No_Game_No_Life_/article/details/105513768
Recomendado
Clasificación