Ghe*_*man 4 counter increment race-condition redis
我有一个手术需要做 N 次,不能再多了。该操作由许多接收请求的可能并行进程完成。进程必须检查计数器是否超过 N,如果没有,则增加计数器并执行操作。我想我可以为此使用 Redis 计数器。
但是,如果我只是GET然后INCR一个值,我可能会遇到竞争条件,这将导致操作进行 N 次以上。如何test-and-incr对 Redis执行某种操作?
我知道我可以使用,WATCH但这是一个乐观锁。我预计每秒钟都会发生很多碰撞。这会导致很多失败。也许我只是包装简单GET,并INCR具有某种外部互斥的。但我不确定它是否足以满足性能。
INCR在这里安全地使用Redis 。INCR 返回增量后的值。
您首先检查 INCR 返回的值(请参阅无需执行 GET )并根据该值继续执行操作。