|
@@ -673,6 +673,66 @@ def update_redis_data(result, app_type, mid, top_K, expire_time=24*3600):
|
|
|
log_.error(traceback.format_exc())
|
|
|
|
|
|
|
|
|
+def update_flow_redis_data(result, app_type, mid, top_K, expire_time=24*3600):
|
|
|
+ """
|
|
|
+ 根据最终的排序结果更新相关redis数据
|
|
|
+ :param result: 排序结果
|
|
|
+ :param app_type: 产品标识
|
|
|
+ :param mid: mid
|
|
|
+ :param top_K: 保证topK为召回池视频 type-int
|
|
|
+ :param expire_time: 末位视频记录redis过期时间
|
|
|
+ :return: None
|
|
|
+ """
|
|
|
+ # ####### redis数据刷新
|
|
|
+ try:
|
|
|
+ redis_helper = RedisHelper()
|
|
|
+ # log_.info('====== update redis')
|
|
|
+ if mid and mid != 'null':
|
|
|
+ # mid为空时,不做预曝光和定位数据更新
|
|
|
+ # 预曝光数据同步刷新到Redis, 过期时间为0.5h
|
|
|
+ preview_key_name = f"{config_.PREVIEW_KEY_PREFIX}{app_type}:{mid}"
|
|
|
+ preview_video_ids = [int(item['videoId']) for item in result]
|
|
|
+ if preview_video_ids:
|
|
|
+ # log_.error('key_name = {} \n values = {}'.format(preview_key_name, tuple(preview_video_ids)))
|
|
|
+ redis_helper.add_data_with_set(key_name=preview_key_name, values=tuple(preview_video_ids), expire_time=30 * 60)
|
|
|
+ # log_.info('preview redis update success!')
|
|
|
+
|
|
|
+ # 将此次分发的流量池视频,对 本地分发数-1 进行记录
|
|
|
+ if app_type not in [config_.APP_TYPE['LAO_HAO_KAN_VIDEO'], config_.APP_TYPE['ZUI_JING_QI']]:
|
|
|
+ # 获取本地分发数-1策略开关
|
|
|
+ switch = redis_helper.get_data_from_redis(key_name=config_.IN_FLOW_POOL_COUNT_SWITCH_KEY_NAME)
|
|
|
+ if switch is not None:
|
|
|
+ if int(switch) == 1:
|
|
|
+ flow_recall_video = [item for item in result if item.get('flowPool', None) is not None]
|
|
|
+ else:
|
|
|
+ flow_recall_video = [item for item in result if
|
|
|
+ item['pushFrom'] == config_.PUSH_FROM['flow_recall']]
|
|
|
+ else:
|
|
|
+ flow_recall_video = [item for item in result if item['pushFrom'] == config_.PUSH_FROM['flow_recall']]
|
|
|
+ if flow_recall_video:
|
|
|
+ update_local_distribute_count(flow_recall_video)
|
|
|
+ # log_.info('update local distribute count success!')
|
|
|
+
|
|
|
+ # 限流视频分发数记录
|
|
|
+ if app_type == config_.APP_TYPE['APP']:
|
|
|
+ # APP 不计入
|
|
|
+ return
|
|
|
+ limit_video_id_list = redis_helper.get_data_from_set(
|
|
|
+ key_name=f"{config_.KEY_NAME_PREFIX_LIMIT_VIDEO_SET}{datetime.today().strftime('%Y%m%d')}"
|
|
|
+ )
|
|
|
+ if limit_video_id_list is not None:
|
|
|
+ limit_video_id_list = [int(item) for item in limit_video_id_list]
|
|
|
+ for item in result:
|
|
|
+ video_id = item['videoId']
|
|
|
+ if video_id in limit_video_id_list:
|
|
|
+ key_name = f"{config_.KEY_NAME_PREFIX_LIMIT_VIDEO_DISTRIBUTE_COUNT}{video_id}"
|
|
|
+ redis_helper.setnx_key(key_name=key_name, value=0, expire_time=24*2600)
|
|
|
+ redis_helper.incr_key(key_name=key_name, amount=1, expire_time=24*3600)
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ log_.error("update redis data fail!")
|
|
|
+ log_.error(traceback.format_exc())
|
|
|
+
|
|
|
def update_local_distribute_count(videos):
|
|
|
"""
|
|
|
更新本地分发数
|
|
@@ -1262,7 +1322,17 @@ def video_homepage_recommend(request_id, mid, uid, size, app_type, algo_type,
|
|
|
|
|
|
# 简单召回 - 排序 - 兜底
|
|
|
get_result_st = time.time()
|
|
|
- result = video_recommend(request_id=request_id,
|
|
|
+ if ab_code == "60047":
|
|
|
+ result = new_video_recommend(request_id=request_id,
|
|
|
+ mid=mid, uid=uid, app_type=app_type,
|
|
|
+ size=size, top_K=top_K, flow_pool_P=flow_pool_P,
|
|
|
+ algo_type=algo_type, client_info=client_info,
|
|
|
+ ab_code=ab_code, expire_time=expire_time,
|
|
|
+ rule_key=rule_key, data_key=data_key,
|
|
|
+ no_op_flag=no_op_flag, old_video_index=old_video_index,
|
|
|
+ params=params, rule_key_30day=rule_key_30day, shield_config=shield_config)
|
|
|
+ else:
|
|
|
+ result = video_recommend(request_id=request_id,
|
|
|
mid=mid, uid=uid, app_type=app_type,
|
|
|
size=size, top_K=top_K, flow_pool_P=flow_pool_P,
|
|
|
algo_type=algo_type, client_info=client_info,
|
|
@@ -1290,7 +1360,10 @@ def video_homepage_recommend(request_id, mid, uid, size, app_type, algo_type,
|
|
|
# app_type=app_type, mid=mid, uid=uid)
|
|
|
# redis数据刷新
|
|
|
update_redis_st = time.time()
|
|
|
- update_redis_data(result=rank_result, app_type=app_type, mid=mid, top_K=top_K)
|
|
|
+ if ab_code == "60047":
|
|
|
+ update_flow_redis_data(result=rank_result, app_type=app_type, mid=mid, top_K=top_K)
|
|
|
+ else:
|
|
|
+ update_redis_data(result=rank_result, app_type=app_type, mid=mid, top_K=top_K)
|
|
|
# log_.info({
|
|
|
# 'logTimestamp': int(time.time() * 1000),
|
|
|
# 'request_id': request_id,
|
|
@@ -1351,7 +1424,18 @@ def video_relevant_recommend(request_id, video_id, mid, uid, size, app_type, ab_
|
|
|
|
|
|
# 简单召回 - 排序 - 兜底
|
|
|
get_result_st = time.time()
|
|
|
- result = video_recommend(request_id=request_id,
|
|
|
+ if ab_code == "60047":
|
|
|
+ result = new_video_recommend(request_id=request_id,
|
|
|
+ mid=mid, uid=uid, app_type=app_type,
|
|
|
+ size=size, top_K=top_K, flow_pool_P=flow_pool_P,
|
|
|
+ algo_type='', client_info=client_info,
|
|
|
+ ab_code=ab_code, expire_time=expire_time,
|
|
|
+ rule_key=rule_key, data_key=data_key, no_op_flag=no_op_flag,
|
|
|
+ old_video_index=old_video_index, video_id=video_id,
|
|
|
+ params=params, rule_key_30day=rule_key_30day, shield_config=shield_config)
|
|
|
+ # log_.info({
|
|
|
+ else:
|
|
|
+ result = video_recommend(request_id=request_id,
|
|
|
mid=mid, uid=uid, app_type=app_type,
|
|
|
size=size, top_K=top_K, flow_pool_P=flow_pool_P,
|
|
|
algo_type='', client_info=client_info,
|
|
@@ -1380,7 +1464,10 @@ def video_relevant_recommend(request_id, video_id, mid, uid, size, app_type, ab_
|
|
|
|
|
|
# redis数据刷新
|
|
|
update_redis_st = time.time()
|
|
|
- update_redis_data(result=rank_result, app_type=app_type, mid=mid, top_K=top_K)
|
|
|
+ if ab_code == "60047":
|
|
|
+ update_flow_redis_data(result=rank_result, app_type=app_type, mid=mid, top_K=top_K)
|
|
|
+ else:
|
|
|
+ update_redis_data(result=rank_result, app_type=app_type, mid=mid, top_K=top_K)
|
|
|
# log_.info({
|
|
|
# 'logTimestamp': int(time.time() * 1000),
|
|
|
# 'request_id': request_id,
|