用mysql唯一key做分布式锁, 虽然简单, 但坑太多, 来看看:
1. 在高并发场景下, 用mysql做分布式锁, 简直是想找死。
这种问题, 不要选mysql分布式锁, 别作死。
2. 业务准备释放锁的时候, 进程被正常重启了, 或者异常崩溃了,或者掉电了, 锁永远无法释放。 这个坑, 踩过。 四个人, 通宵修数据, 呵呵哒。 墨菲定律告诉我们:有可能出错的事情,终将出错。
这种问题,也并不是毫无办法的,有办法。
3. 业务释放锁时, 如果操作mysql超时(原因多多, 比如网络原因, 比如mysql挂了), 锁释放失败, 便永远无法释放了。 这个坑, 遇到过。
这种问题,也并不是毫无办法的,有办法。
4. 当两个接口中都有加锁的代码时, 如果他们之间有调用关系, 那就呵呵哒了,直接死锁。 这个坑,遇到过。
这种问题, 实际上就是要解决非重入锁的问题, 想办法搞成可重入的锁吧。
缺点多多, 有办法完善, 但慎用。