Преглед изворни кода

通过redis防止重复获取序列号

locky пре 3 година
родитељ
комит
4f9bedf8d8
1 измењених фајлова са 10 додато и 2 уклоњено
  1. 10 2
      Controller/SerialNumberController.py

+ 10 - 2
Controller/SerialNumberController.py

@@ -237,6 +237,14 @@ class SerialNumberView(View):
         save_point = transaction.savepoint()  # 设置事务保存点
         try:
             if sn_qs.exists():
+                sn_qs = sn_qs[0: quantity]
+                serial_number = sn_qs[0].serial_number
+                # 防止重复获取序列号
+                is_lock = redisObject.CONN.setnx(serial_number + 'serial_number_lock', 1)
+                redisObject.CONN.expire(serial_number + 'serial_number_lock', 60)
+                if not is_lock:
+                    return response.json(5)
+
                 if not mac:     # 不传入则分配mac
                     mac_qs = MacModel.objects.filter().values('id', 'value', 'is_active')[0]
                     if not mac_qs['is_active']:
@@ -248,8 +256,8 @@ class SerialNumberView(View):
                         MacModel.objects.filter().update(value=next_mac, update_time=now_time)  # 更新mac表的mac地址值
                     else:
                         MacModel.objects.filter().update(is_active=False, update_time=now_time)
-                sn_qs = sn_qs[0: quantity]
-                serial_number = sn_qs[0].serial_number
+
+                # 更新序列号表数据
                 serialNumberModel = SerialNumberModel(
                     id=sn_qs[0].id,
                     serial_number=serial_number,