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
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)
|