Un lock distribuido en Redis evita que dos workers entren a la vez en la misma sección crítica en condiciones normales, pero no garantiza «cero race conditions» en todos los escenarios. La propia documentación de Redis describe tres fallos que lo impiden: un trabajo que dura más que el vencimiento del lock, un failover con réplica asíncrona y un proceso pausado que sigue actuando después de perder el lock. wredis, una biblioteca Python con API síncrona y asíncrona, empaqueta el patrón básico. Este artículo explica qué anuncia, cómo funciona el patrón de Redis por debajo y cuándo hace falta algo más, como los fencing tokens.
Qué anuncia wredis (y qué no está verificado)
Según el artículo en español de su autor, William Steve Rodríguez Villamizar, wredis ofrece WRedis.lock(...) como context manager síncrono y AsyncWRedis.lock(...) como context manager asíncrono. Los ejemplos que muestra son el procesamiento de liquidaciones y de pagos. El autor afirma que el paquete automatiza cuatro cosas:
As an Amazon Associate I earn from qualifying purchases.
- tokens UUID para identificar al dueño del lock;
- liberación mediante un script Lua;
- TTL (vencimiento) del lock;
- reintentos con backoff.
Son afirmaciones del autor. No se ha inspeccionado el código de wredis ni se han ejecutado pruebas de concurrencia independientes, así que conviene leerlas como descripción del paquete, no como una garantía auditada.
La ficha de PyPI presenta wredis como biblioteca Redis para Python con APIs síncronas y asíncronas. Declara como requisitos Python 3.9 o posterior y un servidor Redis, local o remoto. La versión consultada es la 1.0.3, cargada el 14 de agosto de 2026; es un dato de publicación, no una medida de calidad, y puede haber cambiado cuando lo leas. La ficha menciona además soporte de Sentinel/Cluster y estructuras de datos, también como características anunciadas.
#1 Best Overall
Cómo funciona el patrón de Redis para una sola instancia
La guía oficial de Redis sobre locks distribuidos y la documentación del comando SET describen el mecanismo que cualquier biblioteca de este tipo debería reproducir.
1. Adquirir: SET con NX y PX
SET resource_name token_unico NX PX 30000
NX: crea la clave solo si no existe. Si ya existe, otro cliente tiene el lock y la respuesta es nula.PX 30000: la clave expira a los 30 000 ms. Si el cliente cae, el lock no queda bloqueado para siempre.token_unico: un valor distinto por cada solicitud (por ejemplo, un UUID). Identifica quién es el dueño.
2. Liberar: borrar solo si el token sigue siendo el mío
Redis indica que el cliente debe borrar la clave únicamente si todavía contiene su token. Si borrara sin comprobarlo, podría eliminar el lock de otro proceso: el primer lock expira, un segundo cliente lo adquiere y el primero, al terminar, lo borra. La comprobación y el borrado deben ser atómicos, y por eso se hacen con un script Lua:
if redis.call("get", KEYS[1]) == ARGV[1] then
return redis.call("del", KEYS[1])
else
return 0
end
Este es el patrón que, según el autor, wredis automatiza con UUID y script Lua.
Free tools Windows power users keep installed
One-click scans. No signup required.
Rank #2
Dónde sigue habiendo race conditions
El trabajo dura más que el TTL
El vencimiento evita bloqueos permanentes, pero obliga a elegir un TTL que cubra el trabajo o a usar una estrategia de extensión. Si el cliente A sigue trabajando cuando su lock expira, el cliente B puede adquirirlo y ambos operan a la vez sobre el recurso. Redis advierte que no hay que suponer que un proceso conserva el lock durante toda su vida. Una pausa del proceso (recolección de basura, suspensión, latencia de red) produce el mismo efecto.
Failover con réplica asíncrona
Con un primario y una réplica asíncrona, la secuencia descrita por Redis es esta:
- A adquiere el lock en el primario.
- El primario falla antes de replicar esa escritura.
- La réplica asciende a primario.
- B adquiere el mismo lock, que para la réplica no existía.
Un lock de una sola instancia con failover puede, por tanto, no cumplir la exclusión mutua bajo ese fallo.
Rank #3
Relojes
La documentación afirma textualmente: «Redis is not using monotonic clock for TTL expiration mechanism». Un salto del reloj de pared puede hacer que un lock expire antes de lo previsto y que más de un cliente crea tenerlo.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Redlock y fencing tokens
Redlock: varios masters independientes
Redis documenta Redlock para quienes necesitan más que una instancia. El cliente intenta adquirir el lock en todos los masters independientes, exige mayoría y descuenta del tiempo de validez el que gastó en conseguirlos. La guía usa cinco instancias como ejemplo razonable de configuración, no como resultado estadístico. Su seguridad sigue dependiendo de terminar el trabajo dentro del tiempo de validez y de supuestos sobre el desvío de los relojes.
Fencing tokens: proteger el recurso, no solo el acceso
La documentación de Redis es clara: «You should implement fencing tokens». La idea es que cada adquisición del lock lleve un número creciente y que el recurso protegido (la base de datos, el servicio de pagos) rechace escrituras con un número menor que el último aceptado. Así, un cliente que perdió el lock sin saberlo no puede pisar el trabajo del nuevo dueño. Requiere que el recurso pueda validar ese token; si no puede, el lock por sí solo no cierra la brecha.
Rank #4
Cómo elegir según tu caso
| Criterio | Lock de una instancia (SET NX PX) | Redlock (varios masters) | Añadir fencing tokens |
|---|---|---|---|
| Topología | Un Redis; con réplica asíncrona hay riesgo en failover | Varios masters independientes (la guía usa cinco como ejemplo) | Independiente del lock; lo valida el recurso |
| Caída del primario | Puede perderse el lock | Tolera la caída de una minoría, según el algoritmo | Rechaza escrituras obsoletas aunque el lock se pierda |
| Trabajos largos o con pausas | Riesgo si supera el TTL | Riesgo si supera el tiempo de validez | Recomendado por Redis para estos casos |
| Coste operativo | Bajo | Mayor (más instancias y lógica de cliente) | Requiere cambios en el recurso protegido |
Como guía práctica: para evitar trabajo duplicado cuyo error es tolerable (cachés, tareas idempotentes), un lock de una instancia con TTL razonable suele bastar. Para pagos o liquidaciones, donde un doble procesamiento tiene coste real, combina el lock con idempotencia y comprobaciones en el propio recurso, como claves únicas, transacciones o fencing tokens.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Respuestas a las dudas habituales
¿Cómo evito que dos workers procesen el mismo pago?
Usa un lock por identificador de pago, con un TTL superior al tiempo máximo esperado de procesamiento, y haz además que la operación sea idempotente en el destino (por ejemplo, una restricción de unicidad por ID de pago). El lock reduce la concurrencia; la idempotencia absorbe el caso en que falle.
¿Qué pasa si el lock expira mientras la tarea sigue?
Otro worker puede entrar. Las opciones son un TTL mayor, una extensión periódica del lock mientras la tarea sigue viva, o fencing tokens. Para saber qué hace wredis en este punto, consulta su documentación o su código, porque el artículo de su autor, tal como se ha consultado, no permite confirmarlo.
Best Value
¿Basta con Redis para evitar race conditions?
No como garantía absoluta. Basta para coordinación de eficiencia en muchos sistemas; para corrección estricta hay que modelar los fallos descritos arriba.
Antes de adoptar wredis
- Comprueba que usas Python 3.9 o posterior y que tienes un Redis accesible.
- Revisa el código del paquete para confirmar que la liberación compara el token y que los reintentos tienen un límite.
- Escribe una prueba de concurrencia propia contra tu topología real, incluyendo un failover simulado.
- Si alojas Redis como servicio gestionado, recuerda que el alojamiento no elimina los límites de consistencia del diseño de lock.
The Bottom Line
wredis puede ahorrarte escribir el patrón SET NX PX más liberación con Lua, según lo que anuncia su autor, pero «cero race conditions» no es una promesa que ningún lock con expiración pueda cumplir por sí solo. Para dinero o datos críticos, añade idempotencia y fencing tokens en el recurso protegido.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

