用mysql实现分布式锁

版权声明:本文为博主原创文章,转载时请务必注明本文地址, 禁止用于任何商业用途, 否则会用法律维权。 https://blog.csdn.net/stpeace/article/details/84679324

       考虑这样一个场景: 多台机器同时执行某一任务,要求某一时刻最多只有一台机器执行, 该怎么搞呢? 可以考虑分布式锁。

       思路:在mysql中插入一条记录,表明获取锁。删除一条记录,表明释放锁。 且在mysql表中设置一个unique key字段, 当有一台机器获得锁后, 其他机器无法获取。

       

       有几个问题:

        1.  如果一台机器获得锁,在释放锁之前进程挂了, 那么其他机器无法获取到锁。 可以引入锁有效时间的概念,超时后,删除记录,释放锁。

        2.  万一获取锁的操作失败了,就直接做错误处理, 也不太好。 可以引入循环重试的方式来解决,控制重试次数。

        实际代码中就是这么搞的, 用起来还比较爽。

猜你喜欢

转载自blog.csdn.net/stpeace/article/details/84679324