¿Cómo es el rendimiento de redis?
Para cualquier tecnología, si solo se mantiene en la etapa "utilizable", es difícil de lograr e incluso existe el riesgo de ser despedido y no poder encontrar trabajo, creo que puedes leer. En este artículo, debes tener la motivación para hacer algo, así que aprovecha esta oportunidad para profundizar en los detalles de implementación de Redis.
Hay muchos detalles en la ejecución de comandos, pero se pueden dividir aproximadamente en: el cliente convierte los comandos ingresados por el usuario en protocolos de comunicación relacionados con Redis y luego usa una conexión de socket para enviar el contenido al servidor, y el servidor lo recibe. Después de obtener el contenido relevante, convierta el contenido en comandos específicos y luego determine la información de autorización del usuario y otra información relacionada. Cuando se pase la verificación, se ejecutará el comando final. Una vez pasada la verificación, se ejecutará el comando final. Una vez ejecutado el comando, se registrará información relevante y datos estadísticos, y luego los resultados se enviarán al cliente, completando así el proceso de ejecución del comando. Si está utilizando el modo de clúster, el nodo maestro también sincronizará el comando con los nodos secundarios. Veamos el proceso de ejecución más específico.
Paso 2: el cliente convierte el comando al protocolo Redis y luego lo envía al servidor a través de una conexión de socket
El cliente y el servidor se comunican a través del socket, y el servidor Se crea un detector de socket durante la inicialización para monitorear la conexión del socket del cliente. El código fuente es el siguiente:
Cuando la conexión del socket es exitosa, el cliente convierte el comando al Protocolo de serialización de Redis (RESP) y lo envía al servidor. Este protocolo está diseñado para garantizar que el servidor lo comprenda. el comando lo más rápido posible. Sin este protocolo, el servidor Redis tendría que atravesar todos los espacios para confirmar el significado del comando, lo que aumentaría la potencia informática del servidor. Enviar el protocolo directamente al servidor equivale a entregar el trabajo de análisis a cada cliente, lo que mejorará en gran medida la velocidad de ejecución de Redis. Por ejemplo, cuando ingresamos el comando set key val, el cliente convertirá este comando al protocolo *3\r/n$3\rnSET\r/n$4\r/nKEY\r/n$4\rnVAL\r/n y enviado al servidor. Para obtener más información sobre el protocolo, consulte la documentación oficial en https://redis.io/topics/protocol
Extensión: Multiplexación de E/S
Redis utiliza la multiplexación de E/S para escuche en múltiples conexiones de socket, lo que hace posible usar una conexión de un solo subproceso para manejar múltiples solicitudes. Esto le permite utilizar un enlace de subproceso único para manejar múltiples solicitudes, lo que reduce la sobrecarga del cambio de subprocesos y evita el bloqueo de E/S, mejorando así en gran medida la eficiencia operativa de Redis.
En pocas palabras, este paso funciona de la siguiente manera:
Paso 3: el servidor recibe el comando
Una vez verificado el tamaño de los datos, el servidor analiza la solicitud de entrada comando en el búfer, extraiga los parámetros del comando contenidos en la solicitud y guárdelos en el objeto del cliente (objeto Cliente). El servidor crea un objeto de cliente para cada enlace).
Paso 4: Prepárese para la ejecución
① Determine si el comando es un comando de salida, si es así, regrese directamente
② Juicio no vacío, verifique; el objeto del cliente ¿Está vacío? Si es así, devuelve un mensaje de error
③ Obtenga el comando que se ejecutará y envíelo a redisConsole en función de la información de atributos almacenada en el objeto del cliente.
② Juicio no nulo, verifique si el objeto del cliente está vacío, si está vacío, devuelve un mensaje de error
③ Obtenga el comando que se ejecutará, según el atributo; información almacenada en el objeto del cliente, vaya a la estructura redisCommand para consultar el comando a ejecutar;
④ Verificación de permisos del usuario, el cliente que no ha pasado la verificación solo puede ejecutar el comando AUTH. que no ha pasado la verificación ejecuta un comando distinto de AUTH,
⑤ Para operaciones relacionadas con clúster, si el modo es clúster, el comando será redirigido
⑤ Para operaciones relacionadas con clúster operaciones, si el modo es el modo de clúster, el comando se redirigirá al nodo de destino, pero si es el nodo maestro, no se requiere redirección
⑥ Verifique el límite máximo de memoria en el lado del servidor; Si el límite máximo de memoria está habilitado en el lado del servidor, primero se verificará el tamaño de la memoria. Si la memoria excede el valor máximo, la memoria se reciclará
⑦ Detección de persistencia, verifique si el servidor tiene; persistencia habilitada y detener la configuración de persistencia cuando ocurre un error. p>
⑨ Verificación del nodo esclavo de solo lectura. Cuando el servidor es un nodo esclavo de solo lectura, solo acepta comandos de escritura del nodo maestro.
⑩ Juicio de suscripción del cliente; Cuando un cliente se suscribe a un canal, solo se ejecutarán algunos comandos (solo se ejecutarán SUBSCRIBE, PSUBSCRIBE, UNSUBSCRIBE y PUNSUBSCRIBE, otros comandos serán rechazados).
? Verificación del estado del esclavo, cuando el servidor es esclavo y no está conectado al servidor maestro, solo comandos relacionados con la consulta de estado, como información
? el servidor se inicia, solo se ejecutarán los comandos con el indicador de carga y otros comandos serán rechazados;
? Verificación de bloqueo del script Lua, cuando el servidor se bloquea debido a la ejecución del script lua, solo se ejecutarán algunos comandos. se ejecutará;
?Verificación del comando de transacción, si se ejecuta el comando de transacción, habilite la transacción y coloque el comando en la cola de espera
?Juicio de monitoreo, si el servidor tiene el; función de monitoreo habilitada, el servidor también ejecutará el comando y los parámetros relacionados enviados al monitor (el monitor se usa para monitorear el estado de ejecución del servidor).
Una vez que el servidor completa estas operaciones, puede ejecutar el comando real.
Paso 5: Ejecute el comando final y llame a la función proc en redisCommand para ejecutar el comando.
Paso 5: Ejecute el comando final y llame a la función proc en redisCommand para ejecutar el comando.
Paso 6: Después de la ejecución, registro y estadísticas ① Verifique si la consulta lenta está activada, si es así, registre la consulta lenta ② Verifique si las estadísticas están activadas, si es así, registre las estadísticas Información, como cómo; cuánto tiempo tomó ejecutar el comando y cuánto tiempo tomó sumar el recuento; ③ Verifique si la persistencia está activada y, de ser así, registre las consultas lentas. Compruebe si la persistencia está habilitada. Si está habilitada, se registrará la información de persistencia; ④ Si hay otros servidores esclavos que replican el servidor actual, el comando recién ejecutado se propagará a otros servidores esclavos.
Paso 7: Devolver los resultados al cliente. Después de ejecutar el comando, el servidor enviará los resultados al cliente a través del socket y el cliente mostrará los resultados al usuario.
Resumen
Cuando el usuario ingresa un comando, el cliente convertirá el socket de datos al protocolo Redis y lo enviará al servidor, y luego el servidor convertirá el protocolo en un comando real y verificar que los comandos se ejecuten de forma correcta y segura. Pero una vez completado el proceso de verificación, llamará a un método específico para ejecutar el comando, realizará estadísticas y registros relevantes una vez completada la ejecución y luego devolverá los resultados de la ejecución al cliente.