修复一个线上1万6千次错误的bug
def get_root(self): try: self.photo except: return key = "photo:root:%s:" % self.photo.id root = cache.get(key) if root is None: try: root = self.category in [1, 9] and \ self or Message.objects.get(photo__id=self.photo_id, category__in=[1, 9], status__in=[0, 6])[0] except Message.DoesNotExist: pass if root: cache.set(key, root, 3600 * 2) return root and root.status != 5 and root or None
?里面的get其实存在大于1这种情况的。修改为:
?
if root is None: try: root = self.category in [1, 9] and \ self or Message.objects.filter(photo__id=self.photo_id, category__in=[1, 9], status__in=[0, 6])[0] except Message.DoesNotExist: pass except IndexError: pass
?
?
小结:
? ? 对于这种业务上的唯一性,一定要通过数据库保证唯一性约束
?
?
?
?
?
?
?