Operaciones atómicas y transacciones
Utilice scripts Lua para realizar operaciones Redis atómicas de varios pasos.
Operaciones atómicas y transacciones es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.
¿Por qué realizar operaciones atómicas de varios pasos?
Muchos casos de uso de Redis requieren leer y escribir varias claves en una sola operación coherente. Sin atomicidad, las condiciones de carrera pueden corromper el estado.
Condición de carrera de lectura, modificación y escritura
Sin Lua: GET counter → modificar en el cliente → SET counter. Dos clientes pueden leer el mismo valor, modificarlo y, después, el segundo SET sobrescribir los cambios del primero.
Solución con un script de Lua
Con Lua en Redis, la operación de lectura, modificación y escritura se realiza de forma atómica dentro del servidor.
EVAL "
local val = redis.call('GET', KEYS[1])
val = tonumber(val) or 0
val = val + tonumber(ARGV[1])
redis.call('SET', KEYS[1], val)
return val
" 1 counter 5Comparación e intercambio
Implemente CAS (compare-and-swap) de forma atómica: actualice el valor solo si el valor actual coincide con el esperado.
EVAL "
local cur = redis.call('GET', KEYS[1])
if cur == ARGV[1] then
redis.call('SET', KEYS[1], ARGV[2])
return 1
end
return 0
" 1 mykey expected newvalueBloqueo distribuido
Adquiera un bloqueo de forma atómica: SET key value NX EX seconds. Este es el patrón seguro, equivalente en Lua.
EVAL "
if redis.call('SET', KEYS[1], ARGV[1], 'NX', 'EX', ARGV[2]) then
return 1
end
return 0
" 1 lock:resource "owner-uuid" 30Liberación segura del bloqueo
Libere el bloqueo solo si usted es su propietario. Esto evita que otro cliente libere el bloqueo de otra persona.
EVAL "
if redis.call('GET', KEYS[1]) == ARGV[1] then
return redis.call('DEL', KEYS[1])
end
return 0
" 1 lock:resource "owner-uuid"Transacciones con varias claves
Los scripts de Lua pueden operar sobre varias claves de forma atómica, algo que MULTI/EXEC no puede garantizar (puede fallar a mitad de la ejecución y dejar un estado parcial).
MULTI/EXEC frente a Lua
MULTI/EXEC pone los comandos en cola para ejecutarlos por lotes, pero no es realmente atómico con respecto a los valores leídos (watch/unwatch añade complejidad). Los scripts de Lua son más sencillos y completamente atómicos.
Reversión en Lua
Redis Lua no admite transacciones con reversión. Si se produce un error a mitad de la ejecución, los comandos redis.call ejecutados anteriormente no se revierten. Diseñe los scripts de forma segura comprobando primero las precondiciones.
Límites de tamaño de los scripts
Los scripts deben ser pequeños y rápidos. La lógica compleja pertenece a la capa de aplicación, no a Redis. Utilice Lua solo para la sección atómica.
Pruebas de atomicidad
Pruebe las condiciones de carrera con clientes de Redis concurrentes. Verifique que el script de Lua mantenga el estado correcto con un alto nivel de concurrencia utilizando herramientas de benchmarking de Redis.
Pregunta sobre operaciones atómicas
¿Por qué es más segura una operación de lectura, modificación y escritura en un script de Lua de Redis que realizarla en el código de la aplicación?
Repaso: operaciones atómicas y transacciones
Utilice scripts de Lua de Redis para realizar operaciones atómicas de lectura, modificación y escritura, CAS y bloqueos distribuidos. Los scripts de Lua son más sencillos y correctos que MULTI/EXEC para las operaciones que dependen de valores leídos. Mantenga los scripts mínimos y pruébelos con concurrencia.
Preguntas frecuentes
¿La lección «Operaciones atómicas y transacciones» es gratis?
Sí — el texto completo de «Operaciones atómicas y transacciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Operaciones atómicas y transacciones»?
Utilice scripts Lua para realizar operaciones Redis atómicas de varios pasos. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Lua Academy?
No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Operaciones atómicas y transacciones»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Lua Academy?
Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- EVAL y el entorno Lua de Redis
- Operaciones atómicas y transacciones
- Limitación de frecuencia con Lua
- SCRIPT LOAD y EVALSHA