我试图为计数器实现(我认为是)一个非常简单的数据模型:
class VisitorDayTypeCounter(models.Model):
visitType = models.CharField(max_length=60)
visitDate = models.DateField('Visit Date')
counter = models.IntegerField()
当有人通过时,它将查找与visitType和visitDate匹配的行;如果该行不存在,则将创建计数器=0.
然后我们增加计数器并保存.
我担心的是,这个过程完全是一场比赛.两个请求可以同时判断实体是否在那里,并且两个请求都可以创建它.在读取计数器和保存结果之间,另一个请求可能会通过并递增计数器(导致计数丢失).
到目前为止,无论是在Django文档中还是在教程中,我都没有找到解决这个问题的好方法(事实上,教程的投票部分似乎有一个种族条件).
我怎么才能安全地做这件事呢?