野狐禅版本, golang示例
func AcquireLock(lock_key string, lock_value string, timeout uint32) bool {
// SET lock_key lock_value NX PX ttl_with_seconds
// return is_success
}
func ReleaseLock(lock_key string) {
// DELETE lock_key
}
func Process(lock_key string, lock_value string, timeout uint32) {
if AcquireLock(lock_key, lock_value, timeout) {
// 无论业务逻辑执行是否成功, 一定释放锁
defer func() {
ReleaseLock(lock_key)
}()
// do something
// maybe process over lock TTL
}
}
看上去很完美的实现. But Really Good Job?
惨案是如何发生的
这里完全没考虑如果业务执行超过TTL时间, 导致锁被自动释放的情况 >_< !!!!!!!!!!!!