Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 29611|Respuesta: 2

[Redis] Redis utiliza scripts Lua para explicaciones detalladas

[Copiar enlace]
Publicado en 30/4/2021 15:42:57 | | | |
En cuanto a Redis, todo el mundo lo usa a menudo, y el escenario más utilizado es el almacenamiento en caché de datos.

revisión

Diferencia de persistencia de Redis entre RDB y AOF
https://www.itsvse.com/thread-9555-1-1.html

La instalación de Docker ejecuta la caché Redis
https://www.itsvse.com/thread-8995-1-1.html

Los ejemplos explican qué son la penetración de cachés de Redis, avalancha de caché y ruptura de caché
https://www.itsvse.com/thread-8968-1-1.html

Comodines de Redis para eliminar claves en masa
https://www.itsvse.com/thread-7957-1-1.html

Instalación de CentOS 7 Tutorial de Redis 5.0.3
https://www.itsvse.com/thread-7201-1-1.html

Instala la extensión Redis bajo php 5.5.7 bajo CentOS
https://www.itsvse.com/thread-7200-1-1.html

¿Cuántas claves se pueden almacenar en una instancia de Redis y cuáles son las claves y valores máximos?
https://www.itsvse.com/thread-6848-1-1.html

El tema del chino redis no puede mostrarse correctamente
https://www.itsvse.com/thread-5032-1-1.html

Redis permite el acceso remoto
https://www.itsvse.com/thread-5011-1-1.html

Windows no logra iniciar el servicio Redis, error 1067: El proceso termina inesperadamente.
https://www.itsvse.com/thread-5010-1-1.html

CentOS instaló Redis 4.0.8
https://www.itsvse.com/thread-4614-1-1.html

Redis configura contraseñas de conexión y acceso remotas
https://www.itsvse.com/thread-4101-1-1.html

Redis vacía la caché de datos
https://www.itsvse.com/thread-4027-1-1.html

Configuración de persistencia de Redis y persistencia apagada
https://www.itsvse.com/thread-4012-1-1.html

La diferencia entre guardar y guardar en redis
https://www.itsvse.com/thread-4010-1-1.html

Redis dos métodos y principios de persistencia
https://www.itsvse.com/thread-4009-1-1.html

Redis tiene tres formas de empezar
https://www.itsvse.com/thread-4008-1-1.html

Método Redis para ocultar ventanas de línea de comandos
https://www.itsvse.com/thread-2988-1-1.html

Redis Problema de hash hash de valor
https://www.itsvse.com/thread-2587-1-1.html

5 cosas que debes saber antes de usar Redis
https://www.itsvse.com/thread-2580-1-1.html

Redis modifica el número de puerto por defecto y establece la contraseña de acceso
https://www.itsvse.com/thread-2577-1-1.html

Redis Windows 64-bit download, dirección oficial de descarga
https://www.itsvse.com/thread-2576-1-1.html
A partir de redis 2.6.0, redis cuenta con un intérprete de Lua integrado y proporciona un comando de evaluación para analizar la evaluación del script Lua.

Sintaxis: eval script numkeys args

Parámetros:

eval — Redis proporciona comandos para analizar el script de Lua

Escritura — Escritura Lua

numkeys — Especifica el número de claves en el conjunto de parámetros de nombre de clave

claves — El conjunto de parámetros de nombres clave, representado por la variable global matriz KEYS, que comienza con un subíndice de 1

args — Un conjunto de parámetros clave-valor, representados por un array de variables globales ARGV, que comienza con un subíndice de 1


Ventajas de usar Lua en Redis

Reducir la sobrecarga de red. Se pueden enviar múltiples solicitudes a la vez en forma de scripts para reducir la latencia de red
Manipulación atómica. Redis ejecutará todo el script en su totalidad, sin que se inserten otros comandos intermedios. Por lo tanto, no hay necesidad de preocuparse por las condiciones de la carrera ni las transacciones durante el proceso de scripting.
Reincorporado. Los pasos enviados por el cliente se almacenan de forma persistente en redis para que otros clientes puedan reutilizar el script sin tener que usar código para completar la misma lógica.

Atomicidad de la escritura

Los scripts Lua no pueden tener operaciones que consuman mucho tiempo ni bucles muertos; de lo contrario, Redis no aceptará otros comandos ni se ejecutará para detener la ejecución del script

Redis utiliza un único intérprete Lua para ejecutar todos los scripts y asegura que los scripts se ejecuten de forma atómica.Esto significa que cuando un script está en ejecución, no se ejecutarán otros scripts ni comandos Redis! Por lo tanto, si el script actual se ejecuta lentamente, el servidor puede no ser capaz de ejecutar el comando porque está ocupado, por ejemplo:

Cada script tiene un límite máximo de tiempo de ejecución, el valor por defecto es 5s. El tiempo máximo de ejecución se controla mediante la opción de límite de tiempo lua del archivo de configuración redis.conf, o directamente usando los comandos config get y config set. Cuando una ejecución de script alcanza su tiempo máximo de ejecución, Redis no la termina activamente, sino que realiza los siguientes pasos:

(1) Redis registra que un script se está quedando sin tiempo

(2) Redis empieza a volver a aceptar solicitudes de otros clientes, pero solo acepta la ejecución de comandos de eliminación de scripts y el cierre de la nosave.

(3) Si el script solo realiza operaciones de lectura, usar el comando de eliminación del script para detener el script inmediatamente; Si el script realiza una operación de escritura, solo el comando de apagado/nosave puede detener al servidor para evitar que los datos actuales se escriban en el disco. (En ese momento, el servidor está caído y los datos no se guardarán)


ejemplo

Ejecuta el script, los parámetros son 2 clave y valor, y el comando es el siguiente:


En los scripts de bucle muerto, ejecutar el siguiente script hará que Redis no pueda procesar otros comandos y se quede atascado:

Prueba a usar un script para añadir la cadena de datos de tipo con el siguiente comando:

Ejecuta algunos scripts más complejos, si el valor de la clave es igual al valor que hemos pasado, luego elimina la caché, si no, haz cualquier cosa, el comando es el siguiente:

Los resultados de la implementación son los siguientes:



(Fin)




Anterior:.NET/C# Lock Principle Monitor ofrece una explicación detallada
Próximo:Solución de solicitud PUT 405 de IIS DELETE
 Propietario| Publicado en 10/5/2021 9:18:34 |

El inicio de sesión del hipervínculo es visible.
El comando Redis Script Load se utiliza para añadir un script a la caché de scripts, pero no se ejecuta de inmediato.

El comando EVAL también añade el script a la caché de scripts, pero evalúa el script de entrada inmediatamente.

Si el script dado ya está en la caché, entonces no se toma ninguna acción.

Una vez añadido el script a la caché, se puede llamar usando la suma de comprobación SHA1 del script mediante el comando EVALSHA. (Esto también significa.)El mismo script ejecuta el mismo valor sha1 en cualquier servidor redis diferente

Los scripts pueden permanecer en la caché durante un tiempo infinito hasta que se ejecuta el SCRIPT FLUSH.



 Propietario| Publicado en 12/5/2021 11:38:55 |
Determina si el script de lua está en la caché


Tras reiniciar Dikus, el script Lua se borra automáticamente, no será permanente

Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com