Explorar el Código

redis-opt-20220812

liqian hace 2 años
padre
commit
a182e7f16f
Se han modificado 4 ficheros con 202 adiciones y 137 borrados
  1. 145 101
      config.py
  2. 12 10
      manager_op.py
  3. 38 17
      recommend.py
  4. 7 9
      video_recall.py

+ 145 - 101
config.py

@@ -25,49 +25,48 @@ class BaseConfig(object):
         '10037': '100373',  # 相关推荐, 小程序地域分组小时级数据
     }
 
-    # AB实验配置
-    AB_EXP_CODE = {
-        # 'rec_size_home': '003',
-        # 'rec_size_relevant': '004',
-        # 'rule_rank1': '011',
-        # 'rule_rank2': '016',
-        # 'rov_rank_appType_18_19': '019',
-        # 'rule_rank3': '023',
-        # 'rule_rank4': '024',
-        # 'rule_rank5': '025',
-        # 'rov_rank_appType_19': '027',
-        # 'day_rule_rank1': '026',
-        # 'day_rule_rank2': '030',
-        # 'ab_initial': '031',
-        # 'old_video': '034',
-        # 'region_rule_rank1': '037',
-        # 'rule_rank6': '040',
-        # '24h_rule_rank1': '052',
-        # 'region_rule_rank2': '054',
-        # 'region_rule_rank3': '055',
-        # 'top_video_relevant_appType_19': '058',
-        # '24h_rule_rank2': '059',
-        # 'whole_movies': '063',
-        'region_rule_rank4_appType_5_data1': '068',
-        'region_rule_rank4_appType_19': '069',
-        'region_rule_rank4_appType_4': '072',
-        'region_rule_rank4_appType_6': '073',
-        'region_rule_rank4_appType_18': '074',
-        'region_rule_rank4': '079',
-        # 'region_rule_rank3_appType_5_data2': '081',
-        'region_rule_rank4_appType_5_data3': '082',
-        'region_rule_rank4_appType_5_data4': '083',
-        'region_rule_rank4_appType_0_data2': '084',
-        'region_rule_rank4_appType_19_data2': '089',
-        'region_rule_rank4_appType_19_data3': '090',
-        'region_rule_rank5_appType_0_data1': '095',
-        'region_rule_rank4_appType_4_data2': '096',
-        'region_rule_rank4_appType_4_data3': '097',
-        'region_rule_rank4_appType_6_data2': '098',
-        'region_rule_rank4_appType_6_data3': '099',
-        'region_rule_rank4_appType_18_data2': '100',
-        'region_rule_rank6_appType_0_data1': '105',
-    }
+    # AB_EXP_CODE = {
+    #     # 'rec_size_home': '003',
+    #     # 'rec_size_relevant': '004',
+    #     # 'rule_rank1': '011',
+    #     # 'rule_rank2': '016',
+    #     # 'rov_rank_appType_18_19': '019',
+    #     # 'rule_rank3': '023',
+    #     # 'rule_rank4': '024',
+    #     # 'rule_rank5': '025',
+    #     # 'rov_rank_appType_19': '027',
+    #     # 'day_rule_rank1': '026',
+    #     # 'day_rule_rank2': '030',
+    #     # 'ab_initial': '031',
+    #     # 'old_video': '034',
+    #     # 'region_rule_rank1': '037',
+    #     # 'rule_rank6': '040',
+    #     # '24h_rule_rank1': '052',
+    #     # 'region_rule_rank2': '054',
+    #     # 'region_rule_rank3': '055',
+    #     # 'top_video_relevant_appType_19': '058',
+    #     # '24h_rule_rank2': '059',
+    #     # 'whole_movies': '063',
+    #     'region_rule_rank4_appType_5_data1': '068',
+    #     'region_rule_rank4_appType_19': '069',
+    #     'region_rule_rank4_appType_4': '072',
+    #     'region_rule_rank4_appType_6': '073',
+    #     'region_rule_rank4_appType_18': '074',
+    #     'region_rule_rank4': '079',
+    #     # 'region_rule_rank3_appType_5_data2': '081',
+    #     'region_rule_rank4_appType_5_data3': '082',
+    #     'region_rule_rank4_appType_5_data4': '083',
+    #     'region_rule_rank4_appType_0_data2': '084',
+    #     'region_rule_rank4_appType_19_data2': '089',
+    #     'region_rule_rank4_appType_19_data3': '090',
+    #     'region_rule_rank5_appType_0_data1': '095',
+    #     'region_rule_rank4_appType_4_data2': '096',
+    #     'region_rule_rank4_appType_4_data3': '097',
+    #     'region_rule_rank4_appType_6_data2': '098',
+    #     'region_rule_rank4_appType_6_data3': '099',
+    #     'region_rule_rank4_appType_18_data2': '100',
+    #     'region_rule_rank6_appType_0_data1': '105',
+    # }
 
     # abTest
     AB_TEST = {
@@ -132,6 +131,50 @@ class BaseConfig(object):
         'whole_movies': 90001,  # 最惊奇首页/相关推荐 完整影视资源实验
     }
 
+    # AB实验配置
+    AB_EXP_CODE = {
+        '069': {
+            'data_key': 'data1', 'rule_key': 'rule3', 'ab_code': AB_CODE['region_rank_by_h'].get('region_rule_rank4')
+        },  # 最惊奇:data-vlog, rule-rule3
+        '072': {
+            'data_key': 'data1', 'rule_key': 'rule3', 'ab_code': AB_CODE['region_rank_by_h'].get('region_rule_rank4')
+        },  # 票圈视频:data-vlog, rule-rule3
+        '073': {
+            'data_key': 'data1', 'rule_key': 'rule3', 'ab_code': AB_CODE['region_rank_by_h'].get('region_rule_rank4')
+        },  # 票圈短视频:data-vlog, rule-rule3
+        '074': {
+            'data_key': 'data1', 'rule_key': 'rule3', 'ab_code': AB_CODE['region_rank_by_h'].get('region_rule_rank4')
+        },  # 老好看视频:data-vlog, rule-rule3
+        '082': {
+            'data_key': 'data2', 'rule_key': 'rule3',
+            'ab_code': AB_CODE['region_rank_by_h'].get('region_rule_rank4_appType_5_data3')
+        },  # 票圈内容精选:data-[内容精选,vlog], rule-rule3
+        '083': {
+            'data_key': 'data6', 'rule_key': 'rule3',
+            'ab_code': AB_CODE['region_rank_by_h'].get('region_rule_rank4_appType_5_data4')
+        },  # 票圈内容精选:data-[内容精选,vlog, 票圈视频,票圈短视频], rule-rule3
+        '095': {
+            'data_key': 'data1', 'rule_key': 'rule4',
+            'ab_code': AB_CODE['region_rank_by_h'].get('region_rule_rank5_appType_0_data1')
+        },  # vlog:data-vlog, rule-rule4
+        '096': {
+            'data_key': 'data3', 'rule_key': 'rule3',
+            'ab_code': AB_CODE['region_rank_by_h'].get('region_rule_rank4_appType_4_data2')
+        },  # 票圈视频:data-[票圈视频,vlog], rule-rule3
+        '097': {
+            'data_key': 'data6', 'rule_key': 'rule3',
+            'ab_code': AB_CODE['region_rank_by_h'].get('region_rule_rank4_appType_4_data3')
+        },  # 票圈视频:data-[内容精选,vlog, 票圈视频,票圈短视频], rule-rule3
+        '098': {
+            'data_key': 'data4', 'rule_key': 'rule3',
+            'ab_code': AB_CODE['region_rank_by_h'].get('region_rule_rank4_appType_6_data2')
+        },  # 票圈短视频:data-[票圈短视频,vlog], rule-rule3
+        '099': {
+            'data_key': 'data6', 'rule_key': 'rule3',
+            'ab_code': AB_CODE['region_rank_by_h'].get('region_rule_rank4_appType_6_data3')
+        },  # 票圈短视频:data-[内容精选,vlog, 票圈视频,票圈短视频], rule-rule3
+    }
+
     # 小程序小时级列表key不同实验标识
     RULE_KEY = {
         'initial': '',
@@ -144,28 +187,28 @@ class BaseConfig(object):
     }
 
     # 小程序地域分组小时级列表key不同实验标识
-    RULE_KEY_REGION = {
-        'initial': {'rule_key': '', 'data_key': ''},
-        # 'region_rule_rank1': 'rule1',
-        # 'region_rule_rank2': 'rule1',
-        # 'region_rule_rank3': {'rule_key': 'rule2', 'data_key': 'data1'},
-        'region_rule_rank4': {'rule_key': 'rule3', 'data_key': 'data1'},
-        'region_rule_rank4_appType_5_data1': {'rule_key': 'rule3', 'data_key': 'data1'},
-        # 'region_rule_rank3_appType_5_data2': {'rule_key': 'rule3', 'data_key': 'data2'},
-        'region_rule_rank4_appType_5_data3': {'rule_key': 'rule3', 'data_key': 'data3'},
-        'region_rule_rank4_appType_5_data4': {'rule_key': 'rule3', 'data_key': 'data4'},
-        'region_rule_rank4_appType_0_data2': {'rule_key': 'rule3', 'data_key': 'data2'},
-        'region_rule_rank4_appType_19_data2': {'rule_key': 'rule3', 'data_key': 'data2'},
-        'region_rule_rank4_appType_19_data3': {'rule_key': 'rule3', 'data_key': 'data3'},
-        'region_rule_rank5_appType_0_data1': {'rule_key': 'rule4', 'data_key': 'data1'},
-        'region_rule_rank4_appType_4_data2': {'rule_key': 'rule3', 'data_key': 'data2'},
-        'region_rule_rank4_appType_4_data3': {'rule_key': 'rule3', 'data_key': 'data3'},
-        'region_rule_rank4_appType_6_data2': {'rule_key': 'rule3', 'data_key': 'data2'},
-        'region_rule_rank4_appType_6_data3': {'rule_key': 'rule3', 'data_key': 'data3'},
-        'region_rule_rank4_appType_18_data2': {'rule_key': 'rule3', 'data_key': 'data2'},
-        'region_rule_rank6_appType_0_data1': {'rule_key': 'rule5', 'data_key': 'data1'},
-        'region_rule_rank6_appType_13_data2': {'rule_key': 'rule6', 'data_key': 'data2'},
-    }
+    # RULE_KEY_REGION = {
+    #     'initial': {'rule_key': '', 'data_key': ''},
+    #     # 'region_rule_rank1': 'rule1',
+    #     # 'region_rule_rank2': 'rule1',
+    #     # 'region_rule_rank3': {'rule_key': 'rule2', 'data_key': 'data1'},
+    #     'region_rule_rank4': {'rule_key': 'rule3', 'data_key': 'data1'},
+    #     'region_rule_rank4_appType_5_data1': {'rule_key': 'rule3', 'data_key': 'data1'},
+    #     # 'region_rule_rank3_appType_5_data2': {'rule_key': 'rule3', 'data_key': 'data2'},
+    #     'region_rule_rank4_appType_5_data3': {'rule_key': 'rule3', 'data_key': 'data3'},
+    #     'region_rule_rank4_appType_5_data4': {'rule_key': 'rule3', 'data_key': 'data4'},
+    #     'region_rule_rank4_appType_0_data2': {'rule_key': 'rule3', 'data_key': 'data2'},
+    #     'region_rule_rank4_appType_19_data2': {'rule_key': 'rule3', 'data_key': 'data2'},
+    #     'region_rule_rank4_appType_19_data3': {'rule_key': 'rule3', 'data_key': 'data3'},
+    #     'region_rule_rank5_appType_0_data1': {'rule_key': 'rule4', 'data_key': 'data1'},
+    #     'region_rule_rank4_appType_4_data2': {'rule_key': 'rule3', 'data_key': 'data2'},
+    #     'region_rule_rank4_appType_4_data3': {'rule_key': 'rule3', 'data_key': 'data3'},
+    #     'region_rule_rank4_appType_6_data2': {'rule_key': 'rule3', 'data_key': 'data2'},
+    #     'region_rule_rank4_appType_6_data3': {'rule_key': 'rule3', 'data_key': 'data3'},
+    #     'region_rule_rank4_appType_18_data2': {'rule_key': 'rule3', 'data_key': 'data2'},
+    #     'region_rule_rank6_appType_0_data1': {'rule_key': 'rule5', 'data_key': 'data1'},
+    #     'region_rule_rank6_appType_13_data2': {'rule_key': 'rule6', 'data_key': 'data2'},
+    # }
 
     # 小程序地域分组小时级列表key不同实验标识
     DATA_KEY_REGION = {
@@ -295,36 +338,36 @@ class BaseConfig(object):
     # H_VIDEO_FILER_24H = 'com.weiqu.video.filter.apptype.h.item.24h.'
 
     # 小程序地域分组小时级更新结果存放 redis key前缀,
-    # 完整格式:recall:item:score:apptype:region:h:{region}:{appType}:{data_key}:{rule_key}:{date}:{h}
-    RECALL_KEY_NAME_PREFIX_REGION_BY_H = 'recall:item:score:apptype:region:h:'
+    # 完整格式:recall:item:score:region:h:{region}:{data_key}:{rule_key}:{date}:{h}
+    RECALL_KEY_NAME_PREFIX_REGION_BY_H = 'recall:item:score:region:h:'
 
     # 小程序地域分组天级更新结果与小程序地域分组小时级更新结果去重后 存放 redis key前缀,
     # 完整格式:com.weiqu.video.recall.hot.item.score.dup1.region.day.h.{region}.{rule_key}.{date}.{h}
     # RECALL_KEY_NAME_PREFIX_DUP1_REGION_DAY_H = 'com.weiqu.video.recall.hot.item.score.dup1.region.day.h.'
 
     # 小程序地域分组小时级更新24h结果与小程序地域分组小时级更新结果去重后 存放 redis key前缀,
-    # 完整格式:recall:item:score:apptype:region:dup1:region24h:{region}:{appType}:{data_key}:{rule_key}:{date}:{h}
-    RECALL_KEY_NAME_PREFIX_DUP1_REGION_24H_H = 'recall:item:score:apptype:region:dup1:region24h:'
+    # 完整格式:recall:item:score:region:dup1:region24h:{region}:{data_key}:{rule_key}:{date}:{h}
+    RECALL_KEY_NAME_PREFIX_DUP1_REGION_24H_H = 'recall:item:score:region:dup1:region24h:'
 
     # 小程序天级更新结果与 小程序地域分组天级更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
     # 完整格式:com.weiqu.video.recall.hot.item.score.dup2.region.day.h.{region}.{rule_key}.{date}.{h}
     # RECALL_KEY_NAME_PREFIX_DUP2_REGION_DAY_H = 'com.weiqu.video.recall.hot.item.score.dup2.region.day.h.'
 
     # 小程序24h更新结果与 小程序地域分组24h更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
-    # 完整格式:recall:item:score:apptype:region:dup2:24h:{region}:{appType}:{data_key}:{rule_key}:{date}:{h}
-    RECALL_KEY_NAME_PREFIX_DUP2_REGION_24H_H = 'recall:item:score:apptype:region:dup2:24h:'
+    # 完整格式:recall:item:score:region:dup2:24h:{region}:{data_key}:{rule_key}:{date}:{h}
+    RECALL_KEY_NAME_PREFIX_DUP2_REGION_24H_H = 'recall:item:score:region:dup2:24h:'
     # 小程序小时级24h数据 筛选后的剩余数据 更新结果 与 小程序24h更新结果/小程序地域分组24h更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
-    # 完整格式:recall:item:score:apptype:region:dup3:24h:{region}:{appType}:{data_key}:{rule_key}:{date}:{h}
-    RECALL_KEY_NAME_PREFIX_DUP3_REGION_24H_H = 'recall:item:score:apptype:region:dup3:24h:'
+    # 完整格式:recall:item:score:region:dup3:24h:{region}:{data_key}:{rule_key}:{date}:{h}
+    RECALL_KEY_NAME_PREFIX_DUP3_REGION_24H_H = 'recall:item:score:region:dup3:24h:'
     # 小程序48h更新结果与 小程序地域分组24h更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
-    # 完整格式:recall:item:score:apptype:region:dup2:48h:{region}:{appType}:{data_key}:{rule_key}:{date}:{h}
-    RECALL_KEY_NAME_PREFIX_DUP2_REGION_48H_H = 'recall:item:score:apptype:region:dup2:48h:'
+    # 完整格式:recall:item:score:region:dup2:48h:{region}:{data_key}:{rule_key}:{date}:{h}
+    RECALL_KEY_NAME_PREFIX_DUP2_REGION_48H_H = 'recall:item:score:region:dup2:48h:'
     # 小程序小时级48h数据 筛选后的剩余数据 更新结果 与 小程序48h更新结果/小程序地域分组24h更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
-    # 完整格式:recall:item:score:apptype:region:dup3:48h:{region}:{appType}:{data_key}:{rule_key}:{date}:{h}
-    RECALL_KEY_NAME_PREFIX_DUP3_REGION_48H_H = 'recall:item:score:apptype:region:dup3:48h:'
+    # 完整格式:recall:item:score:region:dup3:48h:{region}:{data_key}:{rule_key}:{date}:{h}
+    RECALL_KEY_NAME_PREFIX_DUP3_REGION_48H_H = 'recall:item:score:region:dup3:48h:'
     # 小程序离线ROV模型结果与 小程序天级更新结果/小程序地域分组天级更新结果/小程序地域分组小时级更新结果 去重后 存放 redis key前缀,
-    # 完整格式:recall:item:score:apptype:region:dup4:rov:{region}:{appType}:{data_key}:{rule_key}:{date}:{h}
-    RECALL_KEY_NAME_PREFIX_DUP_REGION_H = 'recall:item:score:apptype:region:dup4:rov:'
+    # 完整格式:recall:item:score:region:dup4:rov:{region}:{data_key}:{rule_key}:{date}:{h}
+    RECALL_KEY_NAME_PREFIX_DUP_REGION_H = 'recall:item:score:region:dup4:rov:'
 
     # 地域分组小时级视频状态不符合推荐要求的列表 redis key,
     # 完整格式:com.weiqu.video.filter.apptype.region.h.item.{region}.{appType}.{data_key}.{rule_key}
@@ -473,28 +516,29 @@ class BaseConfig(object):
         6: {"dataListDesc": "非地域相对48小时级列表2", "dataListCode": 6, "keyPrefix": RECALL_KEY_NAME_PREFIX_DUP3_REGION_48H_H},
         7: {"dataListDesc": "大列表", "dataListCode": 7, "keyPrefix": RECALL_KEY_NAME_PREFIX_DUP_REGION_H},
     }
-    VIDEO_DATA_LIST_AB_EXP_CODE_MAPPING = {
-        # "055": {"app_type": 0, "data_key": "data1", "rule_key": "rule2"},
-        "068": {"app_type": 5, "data_key": "data1", "rule_key": "rule3"},
-        "069": {"app_type": 19, "data_key": "data1", "rule_key": "rule3"},
-        "072": {"app_type": 4, "data_key": "data1", "rule_key": "rule3"},
-        "073": {"app_type": 6, "data_key": "data1", "rule_key": "rule3"},
-        "074": {"app_type": 18, "data_key": "data1", "rule_key": "rule3"},
-        "079": {"app_type": 0, "data_key": "data1", "rule_key": "rule3"},
-        # "081": {"app_type": 5, "data_key": "data2", "rule_key": "rule3"},
-        "082": {"app_type": 5, "data_key": "data3", "rule_key": "rule3"},
-        "083": {"app_type": 5, "data_key": "data4", "rule_key": "rule3"},
-        "084": {"app_type": 0, "data_key": "data2", "rule_key": "rule3"},
-        "089": {"app_type": 19, "data_key": "data2", "rule_key": "rule3"},
-        "090": {"app_type": 19, "data_key": "data3", "rule_key": "rule3"},
-        "095": {"app_type": 0, "data_key": "data1", "rule_key": "rule4"},
-        "096": {"app_type": 4, "data_key": "data2", "rule_key": "rule3"},
-        "097": {"app_type": 4, "data_key": "data3", "rule_key": "rule3"},
-        "098": {"app_type": 6, "data_key": "data2", "rule_key": "rule3"},
-        "099": {"app_type": 6, "data_key": "data3", "rule_key": "rule3"},
-        "100": {"app_type": 18, "data_key": "data2", "rule_key": "rule3"},
-        "105": {"app_type": 0, "data_key": "data1", "rule_key": "rule5"},
-    }
+
+    # VIDEO_DATA_LIST_AB_EXP_CODE_MAPPING = {
+    #     # "055": {"app_type": 0, "data_key": "data1", "rule_key": "rule2"},
+    #     "068": {"app_type": 5, "data_key": "data1", "rule_key": "rule3"},
+    #     "069": {"app_type": 19, "data_key": "data1", "rule_key": "rule3"},
+    #     "072": {"app_type": 4, "data_key": "data1", "rule_key": "rule3"},
+    #     "073": {"app_type": 6, "data_key": "data1", "rule_key": "rule3"},
+    #     "074": {"app_type": 18, "data_key": "data1", "rule_key": "rule3"},
+    #     "079": {"app_type": 0, "data_key": "data1", "rule_key": "rule3"},
+    #     # "081": {"app_type": 5, "data_key": "data2", "rule_key": "rule3"},
+    #     "082": {"app_type": 5, "data_key": "data3", "rule_key": "rule3"},
+    #     "083": {"app_type": 5, "data_key": "data4", "rule_key": "rule3"},
+    #     "084": {"app_type": 0, "data_key": "data2", "rule_key": "rule3"},
+    #     "089": {"app_type": 19, "data_key": "data2", "rule_key": "rule3"},
+    #     "090": {"app_type": 19, "data_key": "data3", "rule_key": "rule3"},
+    #     "095": {"app_type": 0, "data_key": "data1", "rule_key": "rule4"},
+    #     "096": {"app_type": 4, "data_key": "data2", "rule_key": "rule3"},
+    #     "097": {"app_type": 4, "data_key": "data3", "rule_key": "rule3"},
+    #     "098": {"app_type": 6, "data_key": "data2", "rule_key": "rule3"},
+    #     "099": {"app_type": 6, "data_key": "data3", "rule_key": "rule3"},
+    #     "100": {"app_type": 18, "data_key": "data2", "rule_key": "rule3"},
+    #     "105": {"app_type": 0, "data_key": "data1", "rule_key": "rule5"},
+    # }
     REGION_CODE = {
         '北京': '110000', '天津': '120000', '河北省': '130000', '山西省': '140000', '内蒙古': '150000',
         '辽宁省': '210000', '吉林省': '220000', '黑龙江省': '230000',

+ 12 - 10
manager_op.py

@@ -27,8 +27,9 @@ def get_video_list(ab_exp_code, search_time, data_list_type, region_code, page_n
         return result
     search_time = ':'.join(search_time.split('.'))
     data = []
-    key_params = config_.VIDEO_DATA_LIST_AB_EXP_CODE_MAPPING.get(ab_exp_code)
-    app_type = key_params.get('app_type')
+    key_params = config_.AB_EXP_CODE.get(ab_exp_code)
+    # key_params = config_.VIDEO_DATA_LIST_AB_EXP_CODE_MAPPING.get(ab_exp_code)
+    # app_type = key_params.get('app_type')
     data_key = key_params.get('data_key')
     rule_key = key_params.get('rule_key')
     if data_list_type == 0:
@@ -37,7 +38,7 @@ def get_video_list(ab_exp_code, search_time, data_list_type, region_code, page_n
         for item in key_prefix_list:
             data_list_code = item.get('dataListCode')
             key_prefix = item.get('keyPrefix')
-            key_name = f"{key_prefix}{region_code}:{app_type}:{data_key}:{rule_key}:{search_time}"
+            key_name = f"{key_prefix}{region_code}:{data_key}:{rule_key}:{search_time}"
             key_data = redis_helper.get_all_data_from_zset(key_name=key_name, desc=True, with_scores=True)
             if key_data is None:
                 continue
@@ -55,7 +56,7 @@ def get_video_list(ab_exp_code, search_time, data_list_type, region_code, page_n
             data.extend(videos)
     else:
         key_prefix = config_.VIDEO_DATA_LIST_MAPPING.get(data_list_type).get('keyPrefix')
-        key_name = f"{key_prefix}{region_code}:{app_type}:{data_key}:{rule_key}:{search_time}"
+        key_name = f"{key_prefix}{region_code}:{data_key}:{rule_key}:{search_time}"
         key_data = redis_helper.get_all_data_from_zset(key_name=key_name, desc=True, with_scores=True)
         if key_data is None:
             videos = []
@@ -106,8 +107,9 @@ def search_video(ab_exp_code, search_time, data_list_type, region_code, video_id
         return result
     search_time = ':'.join(search_time.split('.'))
     data = []
-    key_params = config_.VIDEO_DATA_LIST_AB_EXP_CODE_MAPPING.get(ab_exp_code)
-    app_type = key_params.get('app_type')
+    key_params = config_.AB_EXP_CODE.get(ab_exp_code)
+    # key_params = config_.VIDEO_DATA_LIST_AB_EXP_CODE_MAPPING.get(ab_exp_code)
+    # app_type = key_params.get('app_type')
     data_key = key_params.get('data_key')
     rule_key = key_params.get('rule_key')
     if data_list_type == 0 and region_code == '0':
@@ -118,7 +120,7 @@ def search_video(ab_exp_code, search_time, data_list_type, region_code, video_id
             data_list_code = item.get('dataListCode')
             key_prefix = item.get('keyPrefix')
             for code in code_list:
-                key_name = f"{key_prefix}{code}:{app_type}:{data_key}:{rule_key}:{search_time}"
+                key_name = f"{key_prefix}{code}:{data_key}:{rule_key}:{search_time}"
                 rank = redis_helper.get_rank_with_value(key_name=key_name, value=int(video_id), desc=True)
                 score = redis_helper.get_score_with_value(key_name=key_name, value=int(video_id))
                 if rank is None or score is None:
@@ -141,7 +143,7 @@ def search_video(ab_exp_code, search_time, data_list_type, region_code, video_id
         for item in key_prefix_list:
             data_list_code = item.get('dataListCode')
             key_prefix = item.get('keyPrefix')
-            key_name = f"{key_prefix}{region_code}:{app_type}:{data_key}:{rule_key}:{search_time}"
+            key_name = f"{key_prefix}{region_code}:{data_key}:{rule_key}:{search_time}"
             rank = redis_helper.get_rank_with_value(key_name=key_name, value=int(video_id), desc=True)
             score = redis_helper.get_score_with_value(key_name=key_name, value=int(video_id))
             if rank is None or score is None:
@@ -163,7 +165,7 @@ def search_video(ab_exp_code, search_time, data_list_type, region_code, video_id
         code_list = [code for _, code in config_.REGION_CODE.items()]
         key_prefix = config_.VIDEO_DATA_LIST_MAPPING.get(data_list_type).get('keyPrefix')
         for code in code_list:
-            key_name = f"{key_prefix}{code}:{app_type}:{data_key}:{rule_key}:{search_time}"
+            key_name = f"{key_prefix}{code}:{data_key}:{rule_key}:{search_time}"
             rank = redis_helper.get_rank_with_value(key_name=key_name, value=int(video_id), desc=True)
             score = redis_helper.get_score_with_value(key_name=key_name, value=int(video_id))
             if rank is None or score is None:
@@ -182,7 +184,7 @@ def search_video(ab_exp_code, search_time, data_list_type, region_code, video_id
 
     else:
         key_prefix = config_.VIDEO_DATA_LIST_MAPPING.get(data_list_type).get('keyPrefix')
-        key_name = f"{key_prefix}{region_code}:{app_type}:{data_key}:{rule_key}:{search_time}"
+        key_name = f"{key_prefix}{region_code}:{data_key}:{rule_key}:{search_time}"
         rank = redis_helper.get_rank_with_value(key_name=key_name, value=int(video_id), desc=True)
         score = redis_helper.get_score_with_value(key_name=key_name, value=int(video_id))
         if rank is not None and score is not None:

+ 38 - 17
recommend.py

@@ -507,24 +507,44 @@ def get_recommend_params(recommend_type, ab_exp_info, ab_info_data, page_type=0)
     # 不获取人工干预数据标记
     no_op_flag = False
     old_video_index = -1
-    if not ab_exp_info:
-        ab_code = config_.AB_CODE['initial']
-        expire_time = 24 * 3600
-        rule_key = config_.RULE_KEY_REGION['initial'].get('rule_key')
-        data_key = config_.RULE_KEY_REGION['initial'].get('data_key')
-        # old_video_index = -1
-    else:
-        ab_exp_code_list = []
-        config_value_dict = {}
-        for _, item in ab_exp_info.items():
-            if not item:
+    # if not ab_exp_info:
+    #     ab_code = config_.AB_CODE['initial']
+    #     expire_time = 24 * 3600
+    #     rule_key = config_.RULE_KEY_REGION['initial'].get('rule_key')
+    #     data_key = config_.RULE_KEY_REGION['initial'].get('data_key')
+    #     # old_video_index = -1
+    # else:
+
+    # 默认使用 095 实验的配置
+    ab_code = config_.AB_EXP_CODE['095'].get('ab_code')
+    expire_time = 3600
+    rule_key = config_.AB_EXP_CODE['095'].get('rule_key')
+    data_key = config_.AB_EXP_CODE['095'].get('data_key')
+    no_op_flag = True
+
+    # 获取实验配置
+    ab_exp_code_list = []
+    config_value_dict = {}
+    for _, item in ab_exp_info.items():
+        if not item:
+            continue
+        for ab_item in item:
+            ab_exp_code = ab_item.get('abExpCode', None)
+            if not ab_exp_code:
                 continue
-            for ab_item in item:
-                ab_exp_code = ab_item.get('abExpCode', None)
-                if not ab_exp_code:
-                    continue
-                ab_exp_code_list.append(str(ab_exp_code))
-                config_value_dict[str(ab_exp_code)] = ab_item.get('configValue', None)
+            ab_exp_code_list.append(str(ab_exp_code))
+            config_value_dict[str(ab_exp_code)] = ab_item.get('configValue', None)
+
+        for code, param in config_.AB_EXP_CODE.items():
+            if code in ab_exp_code_list:
+                ab_code = param.get('ab_code')
+                expire_time = 3600
+                rule_key = param.get('rule_key')
+                data_key = param.get('data_key')
+                no_op_flag = True
+                break
+
+        """
         # 推荐条数 10->4 实验
         # if config_.AB_EXP_CODE['rec_size_home'] in ab_exp_code_list:
         #     config_value = config_value_dict.get(config_.AB_EXP_CODE['rec_size_home'], None)
@@ -778,6 +798,7 @@ def get_recommend_params(recommend_type, ab_exp_info, ab_info_data, page_type=0)
         #     old_video_index = 2
         # else:
         #     old_video_index = -1
+        """
 
     # APP实验组
     if ab_info_data:

+ 7 - 9
video_recall.py

@@ -957,7 +957,7 @@ class PoolRecall(object):
                     key_prefix = config_.RECALL_KEY_NAME_PREFIX_DUP_24H
                 else:
                     key_prefix = config_.RECALL_KEY_NAME_PREFIX_DUP_H
-                key_name = f"{key_prefix}{self.app_type}:{self.data_key}:{self.rule_key}:{now_date}:{h}"
+                key_name = f"{key_prefix}{self.data_key}:{self.rule_key}:{now_date}:{h}"
                 if self.redis_helper.key_exists(key_name):
                     return key_name, h
                 else:
@@ -967,7 +967,7 @@ class PoolRecall(object):
                     else:
                         redis_h = h - 1
                         redis_date = now_date
-                    key_name = f"{key_prefix}{self.app_type}:{self.data_key}:{self.rule_key}:{redis_date}:{redis_h}"
+                    key_name = f"{key_prefix}{self.data_key}:{self.rule_key}:{redis_date}:{redis_h}"
                     # 判断当前时间是否晚于数据正常更新时间,发送消息到飞书
                     # now_m = datetime.now().minute
                     # feishu_text = '{} —— appType = {}, h = {}, key = {}, province_code = {} 数据未按时更新,请及时查看解决。'.format(
@@ -1630,7 +1630,7 @@ class PoolRecall(object):
         now_date = datetime.today()
         h = datetime.now().hour
         now_dt = datetime.strftime(now_date, '%Y%m%d')
-        now_pool_recall_key = f"{pool_key_prefix}{province_code}:{self.app_type}:{self.data_key}:{self.rule_key}:{now_dt}:{h}"
+        now_pool_recall_key = f"{pool_key_prefix}{province_code}:{self.data_key}:{self.rule_key}:{now_dt}:{h}"
         if self.redis_helper.key_exists(key_name=now_pool_recall_key):
             value = {'date': now_dt, 'h': h}
             self.redis_helper.set_data_to_redis(key_name=record_key, value=str(value), expire_time=2 * 3600)
@@ -1641,7 +1641,7 @@ class PoolRecall(object):
             else:
                 redis_dt = now_dt
                 redis_h = h - 1
-            now_pool_recall_key = f"{pool_key_prefix}{province_code}:{self.app_type}:{self.data_key}:{self.rule_key}:{redis_dt}:{redis_h}"
+            now_pool_recall_key = f"{pool_key_prefix}{province_code}:{self.data_key}:{self.rule_key}:{redis_dt}:{redis_h}"
             value = {'date': redis_dt, 'h': redis_h}
             self.redis_helper.set_data_to_redis(key_name=record_key, value=str(value), expire_time=2 * 3600)
         return now_pool_recall_key
@@ -1666,8 +1666,6 @@ class PoolRecall(object):
 
     def get_last_recommend_video_idx(self, province_code, record_key_prefix, pool_key_prefix, last_video_key_prefix):
         # 判断mid对应上一次视频位置 时间记录
-        # record_key = f"{config_.RECORD_KEY_NAME_PREFIX_LAST_VIDEO_REGION_DUP3_24H}{self.app_type}.{self.mid}"
-        # pool_key_prefix = config_.RECALL_KEY_NAME_PREFIX_DUP3_REGION_24H_H
         record_key = f"{record_key_prefix}{self.app_type}:{self.mid}"
         last_video_key = f'{last_video_key_prefix}{self.app_type}:{self.mid}'
 
@@ -1688,11 +1686,11 @@ class PoolRecall(object):
             now_dt = datetime.strftime(now_date, '%Y%m%d')
             if record_dt == now_dt and int(record_h) == h:
                 # 已获取当前小时数据
-                pool_recall_key = f"{pool_key_prefix}{province_code}:{self.app_type}:{self.data_key}:{self.rule_key}:{now_dt}:{h}"
+                pool_recall_key = f"{pool_key_prefix}{province_code}:{self.data_key}:{self.rule_key}:{now_dt}:{h}"
                 idx = self.get_video_idx(pool_recall_key=pool_recall_key, last_video_key=last_video_key)
             elif (record_dt == now_dt and h-int(record_h) == 1) or (h == 0 and int(record_h) == 23):
                 # 记录的h - 当前h = 1,判断当前h数据是否已更新
-                now_pool_recall_key = f"{pool_key_prefix}{province_code}:{self.app_type}:{self.data_key}:{self.rule_key}:{now_dt}:{h}"
+                now_pool_recall_key = f"{pool_key_prefix}{province_code}:{self.data_key}:{self.rule_key}:{now_dt}:{h}"
                 if self.redis_helper.key_exists(key_name=now_pool_recall_key):
                     new_record = {'date': now_dt, 'h': h}
                     self.redis_helper.set_data_to_redis(key_name=record_key, value=str(new_record), expire_time=2*3600)
@@ -1700,7 +1698,7 @@ class PoolRecall(object):
                     self.redis_helper.del_keys(key_name=last_video_key)
                     pool_recall_key = now_pool_recall_key
                 else:
-                    pool_recall_key = f"{pool_key_prefix}{province_code}:{self.app_type}:{self.data_key}:{self.rule_key}:{record_dt}:{record_h}"
+                    pool_recall_key = f"{pool_key_prefix}{province_code}:{self.data_key}:{self.rule_key}:{record_dt}:{record_h}"
                     idx = self.get_video_idx(pool_recall_key=pool_recall_key, last_video_key=last_video_key)
             else:
                 idx = 0