“对于这些操作,我们同样需要保证它们的原子性。否则,如果客户端使用多线程访问,访问次数初始值为 0,第一个线程执行了 INCR(ip) 操作后,第二个线程紧接着也执行了 INCR(ip),此时,ip 对应的访问次数就被增加到了 2,我们就无法再对这个 ip 设置过期时间了。这样就会导致,这个 ip 对应的客户端访问次数达到 20 次之后,就无法再进行访问了。即使过了 60s,也不能再继续访问,显然不符合业务要求。"
对于这段话我有疑惑,假如有两个线程A和线程B,初始ip计数是0,线程A和线程B并发执行,不管线程A和线程B谁先执行到 value = INCR(ip) ,获取到的value值总会有一个是1,而value作为线程的局部变量,也是可以继续执行下去,那不就是能够执行到 IF value == 1 THEN EXPIRE(ip,60) END 这个判断逻辑了吗,不明白为什么说不能设置先到的ip过期时间60s了?