1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | // return value: // true 可以继续业务流程,业务流程处理完后需要调用 Confirm // false 不能继续业务流程 TryAcquire(id, timeout) { reply = SET id (now+timeout) EX 86400 NX // 1.1 if reply == OK { return true } // 1.2 reply = GET id // 1.2.1 if reply == Confirmed { return false } // 1.2.2 if now < reply { return false } // 1.2.3 delta = now + timeout - reply new_reply = INCRBY id delta if new_reply == reply + delta { return true } else { DECRBY id delta } return false } Confirm(id) { SET id -1 XX } |
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |