在数据库中实现一种锁。创建一个包含三列的锁表:锁名称、工人ID和日期时间。当worker“1234”启动时(“1234”是pod id),它每隔10秒尝试通过以下请求获取锁“database_lock”:UPDATE lock SET worker_id="1234", date_time=CURRENT_TIMESTAMP() WHERE lock="database_lock" AND (worker_id="1234" OR date_time < CURRENT_TIMESTAMP() - 30000);。如果行可以被更新,则工作线程已经成功地“获取”了锁,并且可以处理数据库。如果没有,它将保持空闲状态。在这两种情况下,它将在10秒内再次尝试获取锁。如果worker已经拥有锁,或者锁是在30秒之前获得的,那么它可以获得锁。因此,获得锁的工人通常会保留它,直到它死亡。
1条答案
按热度按时间w3nuxt5m1#
我认为有三种解决办法:
UPDATE lock SET worker_id="1234", date_time=CURRENT_TIMESTAMP() WHERE lock="database_lock" AND (worker_id="1234" OR date_time < CURRENT_TIMESTAMP() - 30000);
。如果行可以被更新,则工作线程已经成功地“获取”了锁,并且可以处理数据库。如果没有,它将保持空闲状态。在这两种情况下,它将在10秒内再次尝试获取锁。如果worker已经拥有锁,或者锁是在30秒之前获得的,那么它可以获得锁。因此,获得锁的工人通常会保留它,直到它死亡。第一个解决方案是https://en.wikipedia.org/wiki/KISS_principle。