基于redis文档:http://redis.io/commands/incr
在段落模式:速率限制器2一个较短的版本代码:
value = INCR(ip) IF value == 1 THEN EXPIRE(ip, 1)
它声称有一个竞争条件让EXPIRE永远不会执行.这意味着ip的值可以某种方式从0反弹到2.
但是在我看来,由于Redis是单线程而INCR是一个原始命令,它本身不应该是原子的?即使两个客户几乎同时进行INCR,它们如何检索0或两者都检索2?
increment race-condition redis
increment ×1
race-condition ×1
redis ×1