PolarDB-X从2.4.0_5.4.19-20240426版本开始,支持MySQL 5.7的所有锁函数,具体情况见下表, 更多信息请参见Locking Functions。
函数名 | 描述 |
GET_LOCK(str, timeout) | 获取一个命名锁,str是锁的名称,timeout是锁的超时时间。返回结果如下:
|
IS_FREE_LOCK(str) | 判断命名锁是否空闲,str是锁的名称。
|
IS_USED_LOCK(str) | 判断命名锁是否被使用,str是锁的名称。如果锁正在被使用,则返回持有锁的客户端会话的连接标识符,否则返回NULL。 |
RELEASE_LOCK(str) | 释放一个命名锁,str是锁的名称。
|
RELEASE_ALL_LOCK() | 释放当前会话持有的所有命名锁。返回结果为释放的锁的数量,如果没有释放锁则返回0。 |
相关函数
PolarDB-X还支持相关函数IS_MY_LOCK(str),判断命名锁是否被当前会话持有,如果当前会话持有该锁,则返回1,否则返回0。
使用建议
如果您的业务场景需要长时间持有锁,为了避免低概率的脑裂分区导致锁失效,建议用户每60s周期内使用IS_MY_LOCK函数定期对锁进行持有判断,使用示例的伪代码如下:
get_lock(lock_name);//获取锁
while(is_my_lock(lock_name)){ //判断锁是否有效
do_work_with_timeout(60); // 执行业务操作,限时60s
if(work_finshed){ //判断业务是否执行结束
break;
}
}
release_lock(lock_name);//释放锁
文档内容是否对您有帮助?