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