Driver FixRecommendedSound, Wi-Fi or graphics acting up? Check drivers firstFind missing or outdated drivers fast.Check DriversHalloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsSlow PC?RecommendedPC slow today? Run a repair scan before it gets worseResolve common Windows issues and optimize system performance.Scan Now×
FREEDOM251

Freedom251 › Blog › concurrencia

Locks distribuidos con Redis y wredis: qué evitan las race conditions y qué no

By Freedom251 Team · · 6 min read

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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:

  1. A adquiere el lock en el primario.
  2. El primario falla antes de replicar esa escritura.
  3. La réplica asciende a primario.
  4. 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.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

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.Support on Ko-Fi

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

¿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.

¿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.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

concurrenciafencing tokenslocks distribuidosPythonRedisRedlockWRedis

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Recommended PC Tool
Recommended PC Tool
Windows Errors? Fix Them Before They SpreadFree repair scan
Crashes, No Sound, or Screen Glitches?Free driver scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.