J'ai lu le post sur les verrous distribués avec Redis au http://redis.io/topics/distlock. Il y a un script lua pour décrire comment faire "déverrouiller".Conditions de concurrence dans les verrous distribués avec Redis
if redis.call("get",KEYS[1]) == ARGV[1] then
return redis.call("del",KEYS[1])
else
return 0
end
Je pense qu'il ya une condition de course avec ce modèle:
- Client A acquiert le verrou avec 3 secondes d'expiration.
SET key randomstring1 NX PX 3000
- Dormez 2,99 secondes.
- Le client A libère le verrou et appelle le code ci-dessus.
- La condition est vraie.
if redis.call("get",KEYS[1]) == ARGV[1] then
- La clé d'origine expires
- client B acquiert Anthor verrouillage.
SET key randomstring2 NX PX 3000
- Client A supprimer la clé.
- Le verrou du client B est supprimé par le client A!