我的目标是完成由django和芹菜组成的项目。
我编写了两个任务,这些任务会从两个不同的Web中删除,并将一些数据保存到数据库 - mysql。
和以前一样,我只做一个任务,并且使用select_for_update
显示足够的内容。
但是,当我想在不同的工作人员中完成更多任务,并且所有人都可以将数据保存到数据库时,他们可以同时保存相同的数据。
如何确保在不同工作人员中运行的不同任务在所有人都尝试保存相同数据时不会重复数据?
我知道django API是update_or_create
,会在数据库中设置锁定。但是,当我阅读文档时,类似的意思是,如果存在,则选择更新。但我想选择,如果存在,更新,否则创建。它更像是.append()
,但此API可能不会使用锁定?
答案 0 :(得分:0)
用户可以在给我正确的答案之前解答我的问题,但我没有得到他们的意思。
最后我使用redis锁来确保没有重复数据。
下面的逻辑:
当我得到数据时,我尝试使用'set(key,value.nx = True,ex = 60)'从redis获取锁定。
如果答案为True,我会尝试使用django queryqpi'update_or_create()'。
如果没有,我什么都没做,然后返回True。
它使突发问题像一个过程一样。