|
@@ -108,6 +108,35 @@ def get_score(video_ids):
|
|
|
return [random.uniform(0, 100) for _ in range(len(video_ids))]
|
|
|
|
|
|
|
|
|
+def online_flow_pool_data_to_redis(app_type, video_ids_set, video_info_data):
|
|
|
+ redis_helper = RedisHelper()
|
|
|
+ for tag, values in video_ids_set.items():
|
|
|
+ if tag == 'quick_flow_pool':
|
|
|
+ key_name_video_ids = \
|
|
|
+ f"{config_.QUICK_FLOWPOOL_VIDEO_ID_KEY_NAME_PREFIX}{app_type}:{config_.QUICK_FLOW_POOL_ID}"
|
|
|
+ key_prefix_video_info = \
|
|
|
+ f"{config_.QUICK_FLOWPOOL_VIDEO_INFO_KEY_NAME_PREFIX}{app_type}:{config_.QUICK_FLOW_POOL_ID}"
|
|
|
+ else:
|
|
|
+ key_name_video_ids = f"{config_.FLOWPOOL_VIDEO_ID_KEY_NAME_PREFIX}{app_type}"
|
|
|
+ key_prefix_video_info = f"{config_.FLOWPOOL_VIDEO_INFO_KEY_NAME_PREFIX}{app_type}"
|
|
|
+ # 如果key已存在,删除key
|
|
|
+ if redis_helper.key_exists(key_name=key_name_video_ids):
|
|
|
+ redis_helper.del_keys(key_name=key_name_video_ids)
|
|
|
+ # 写入redis
|
|
|
+ if len(values) > 0:
|
|
|
+ redis_helper.add_data_with_set(key_name=key_name_video_ids, values=values, expire_time=3600)
|
|
|
+ info_values = video_info_data[tag]
|
|
|
+ if len(info_values) > 0:
|
|
|
+ for video_id, info_value in info_values.items():
|
|
|
+ key_name_video_info = f"{key_prefix_video_info}:{video_id}"
|
|
|
+ # 如果key已存在,删除key
|
|
|
+ if redis_helper.key_exists(key_name=key_name_video_info):
|
|
|
+ redis_helper.del_keys(key_name=key_name_video_info)
|
|
|
+ if len(info_value) > 0:
|
|
|
+ redis_helper.add_data_with_set(key_name=key_name_video_info, values=info_value,
|
|
|
+ expire_time=3600)
|
|
|
+
|
|
|
+
|
|
|
def predict(app_type, video_info_list):
|
|
|
"""
|
|
|
对流量池视频排序,并将结果上传Redis
|
|
@@ -153,20 +182,35 @@ def predict(app_type, video_info_list):
|
|
|
# 上传数据到redis
|
|
|
redis_data = {}
|
|
|
quick_flow_pool_redis_data = {}
|
|
|
+
|
|
|
+ # 用于线上流量池标记补充
|
|
|
+ video_ids_set = {'quick_flow_pool': set(), 'flow_pool': set()}
|
|
|
+ video_info_data = {'quick_flow_pool': {}, 'flow_pool': {}}
|
|
|
+
|
|
|
for i in range(len(video_score)):
|
|
|
video_id = filtered_videos[i]
|
|
|
score = video_score[i]
|
|
|
+ quick_flow_pool_list = set()
|
|
|
+ flow_pool_list = set()
|
|
|
for flow_pool in mapping.get(video_id):
|
|
|
# 判断是否为快速曝光流量池视频
|
|
|
value = '{}-{}'.format(video_id, flow_pool)
|
|
|
flow_pool_id = int(flow_pool.split('#')[0]) # flowPool: 流量池ID#分级ID#级别Level#生命周期ID
|
|
|
if flow_pool_id == config_.QUICK_FLOW_POOL_ID:
|
|
|
quick_flow_pool_redis_data[value] = score
|
|
|
+ video_ids_set['quick_flow_pool'].add(video_id)
|
|
|
+ quick_flow_pool_list.add(flow_pool)
|
|
|
else:
|
|
|
redis_data[value] = score
|
|
|
+ video_ids_set['flow_pool'].add(video_id)
|
|
|
+ flow_pool_list.add(flow_pool)
|
|
|
video_info = (video_id, flow_pool)
|
|
|
if video_info not in video_info_list:
|
|
|
video_info_list.append(video_info)
|
|
|
+ if len(quick_flow_pool_list) > 0:
|
|
|
+ video_info_data['quick_flow_pool'][video_id] = quick_flow_pool_list
|
|
|
+ if len(flow_pool_list) > 0:
|
|
|
+ video_info_data['flow_pool'][video_id] = flow_pool_list
|
|
|
|
|
|
# 快速曝光流量池视频写入redis
|
|
|
redis_helper = RedisHelper()
|
|
@@ -195,6 +239,9 @@ def predict(app_type, video_info_list):
|
|
|
if redis_data:
|
|
|
redis_helper.add_data_with_zset(key_name=flow_pool_key_name, data=redis_data, expire_time=24 * 3600)
|
|
|
|
|
|
+ # 用于线上视频补充流量池标记的数据写入redis
|
|
|
+ online_flow_pool_data_to_redis(app_type=app_type, video_ids_set=video_ids_set, video_info_data=video_info_data)
|
|
|
+
|
|
|
log_.info('data to redis finished!')
|
|
|
|
|
|
return video_info_list
|