Selaa lähdekoodia

美洲服批量保存500条数据,修复重复写入数据问题

locky 1 vuosi sitten
vanhempi
commit
42daa58b97
1 muutettua tiedostoa jossa 27 lisäystä ja 21 poistoa
  1. 27 21
      Service/DevicePushService.py

+ 27 - 21
Service/DevicePushService.py

@@ -244,27 +244,33 @@ class DevicePushService:
 
                 end = 0
                 equipment_info_len = redis_obj.llen(equipment_info_key)
-                if CONFIG_INFO == CONFIG_US:
-                    # 美洲服批量保存300条数据
-                    if equipment_info_len >= 300:
-                        end = 299
-                else:
-                    # 缓存数据多于100条,批量保存前100条,否则保存全部
-                    equipment_info_len = redis_obj.llen(equipment_info_key)
-                    end = 99 if equipment_info_len > 100 else equipment_info_len - 1
-
-                if end != 0:
-                    equipment_info_redis_list = redis_obj.lrange(equipment_info_key, 0, end)
-                    redis_obj.ltrim(equipment_info_key, end+1, -1)
-
-                    for equipment_info in equipment_info_redis_list:
-                        equipment_info_data = eval(equipment_info)
-                        # 设备昵称存在表情,解码utf-8
-                        if equipment_info_data.get('device_nick_name') is not None:
-                            equipment_info_data['device_nick_name'] = equipment_info_data['device_nick_name'].\
-                                encode('UTF-8', 'ignore').decode('UTF-8')
-                        equipment_info_list.append(equipment_info_model(**equipment_info_data))
-                    equipment_info_model.objects.bulk_create(equipment_info_list)
+
+                limit_key = equipment_info_key + 'save_push_data_limit'
+                set_success = redis_obj.CONN.setnx(limit_key, 1)
+                redis_obj.CONN.expire(limit_key, 60)
+                if set_success:
+                    if CONFIG_INFO == CONFIG_US:
+                        # 美洲服批量保存300条数据
+                        if equipment_info_len >= 500:
+                            end = 499
+                    else:
+                        # 缓存数据多于100条,批量保存前100条,否则保存全部
+                        equipment_info_len = redis_obj.llen(equipment_info_key)
+                        end = 99 if equipment_info_len > 100 else equipment_info_len - 1
+
+                    if end != 0:
+                        equipment_info_redis_list = redis_obj.lrange(equipment_info_key, 0, end)
+                        redis_obj.ltrim(equipment_info_key, end+1, -1)
+                        redis_obj.del_data(limit_key)
+
+                        for equipment_info in equipment_info_redis_list:
+                            equipment_info_data = eval(equipment_info)
+                            # 设备昵称存在表情,解码utf-8
+                            if equipment_info_data.get('device_nick_name') is not None:
+                                equipment_info_data['device_nick_name'] = equipment_info_data['device_nick_name'].\
+                                    encode('UTF-8', 'ignore').decode('UTF-8')
+                            equipment_info_list.append(equipment_info_model(**equipment_info_data))
+                        equipment_info_model.objects.bulk_create(equipment_info_list)
 
             return True
         except Exception as e: