我有一个链接到我网站的MySql数据库,它有一个带有任务列表的表(列用下面的“/”分隔),即:
task1 / doTask1.sh / todo
task2 / doTask2.sh / done
task3 / doTask3.sh / todo
task4 / doTask4.sh / todo
等...
在我的网站的每个请求中,我希望执行“待办事项”任务,然后由服务器标记为“完成”。该任务只能执行一次。但问题来了。
如果:
用户A选择标记为“待办事项”的任务。 doTask1.sh执行并标记为已完成,由用户A的请求触发。 用户B选择标记为“todo”的任务(仅限task3和task3,因为task1已完成)。 doTask3.sh执行并标记为已完成,由用户A的请求触发。 doTask3.sh再次执行,由用户B的请求触发。 同样适用于doTask4.sh。
由于同时进行数据库连接,使用PHP / Nginx / MySql会发生这种情况吗?如果是,如何绕过/避免这个问题?
在这个例子中,我使用了doTaskx.sh来简化这种情况。实际上,此列将包含任务的描述,并且支持我的网站的PHP脚本将根据该描述执行任务。
答案 0 :(得分:1)
是的,这可能发生。
解决此问题的一种方法是执行以下操作:
答案 1 :(得分:0)
锁定列表。 获取仍然要执行的请求任务,将它们标记为“正在进行中”,解锁然后将它们传递给执行任务的任何任务。