Browse Source

update config

linfan 1 year ago
parent
commit
ba3ae5c69e
2 changed files with 96 additions and 4 deletions
  1. 5 0
      config.py
  2. 91 4
      recommend.py

+ 5 - 0
config.py

@@ -136,6 +136,7 @@ class BaseConfig(object):
             'abtest_228': 60044,
             'abtest_229': 60045,
             'abtest_262': 60046,
+            'abtest_316': 60047,
         },  # 地域分组小时级规则实验
 
         'rank_by_24h': {
@@ -312,6 +313,10 @@ class BaseConfig(object):
             'ab_code': AB_CODE['region_rank_by_h'].get('abtest_262'),
             'shield_config': SHIELD_CONFIG2,
         },  # vlog:data-vlog, rule-rule4-2
+        '316': {
+            'data_key': 'data10', 'rule_key': 'rule19',
+            'ab_code': AB_CODE['region_rank_by_h'].get('abtest_316')
+        }
     }
 
     # APP ab实验配置

+ 91 - 4
recommend.py

@@ -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,