Sfoglia il codice sorgente

Merge branch 'redis-opt' into test

liqian 2 anni fa
parent
commit
22944803e3
2 ha cambiato i file con 15 aggiunte e 8 eliminazioni
  1. 1 1
      video_rank.py
  2. 14 7
      video_recall.py

+ 1 - 1
video_rank.py

@@ -175,7 +175,7 @@ def bottom_strategy(request_id, size, app_type, ab_code, params):
         log_.info('{} —— ROV推荐进入了二次兜底, data = {}'.format(config_.ENV_TEXT, data))
         send_msg_to_feishu('{} —— ROV推荐进入了二次兜底,请查看是否有数据更新失败问题。'.format(config_.ENV_TEXT))
         # 二次兜底
-        bottom_data = bottom_strategy_last(size=size, app_type=app_type, ab_code=ab_code)
+        bottom_data = bottom_strategy_last(size=size, app_type=app_type, ab_code=ab_code, params=params)
         return bottom_data
 
     # 视频状态过滤采用离线定时过滤方案

+ 14 - 7
video_recall.py

@@ -1623,13 +1623,13 @@ class PoolRecall(object):
             self.redis_helper.set_data_to_redis(key_name=record_key, value=str(value), expire_time=2 * 3600)
         return now_pool_recall_key
 
-    def get_video_idx(self, pool_recall_key):
+    def get_video_idx(self, pool_recall_key, last_video_key):
         """
         获取上次视频所在位置
         :param pool_recall_key: 视频所在列表 key
+        :param last_video_key: 上一次记录的视频
         :return: idx
         """
-        last_video_key = f'{config_.LAST_VIDEO_FROM_REGION_DUP3_24H_PREFIX}{self.app_type}.{self.mid}'
         value = self.redis_helper.get_data_from_redis(last_video_key)
         if value:
             idx = self.redis_helper.get_index_with_data(key_name=pool_recall_key, value=value)
@@ -1641,14 +1641,17 @@ class PoolRecall(object):
             idx = 0
         return idx
 
-    def get_last_recommend_video_idx(self, province_code, record_key_prefix, pool_key_prefix):
+    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}'
+
 
         if not self.redis_helper.key_exists(key_name=record_key):
             # ###### 记录key不存在
+            self.redis_helper.del_keys(key_name=last_video_key)
             idx = 0
             pool_recall_key = self.update_last_video_record(record_key=record_key, pool_key_prefix=pool_key_prefix,
                                                             province_code=province_code)
@@ -1664,7 +1667,7 @@ class PoolRecall(object):
             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}"
-                idx = self.get_video_idx(pool_recall_key=pool_recall_key)
+                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}"
@@ -1672,12 +1675,14 @@ class PoolRecall(object):
                     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)
                     idx = 0
+                    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}"
-                    idx = self.get_video_idx(pool_recall_key=pool_recall_key)
+                    idx = self.get_video_idx(pool_recall_key=pool_recall_key, last_video_key=last_video_key)
             else:
                 idx = 0
+                self.redis_helper.del_keys(key_name=last_video_key)
                 pool_recall_key = self.update_last_video_record(record_key=record_key, pool_key_prefix=pool_key_prefix,
                                                                 province_code=province_code)
 
@@ -1712,7 +1717,8 @@ class PoolRecall(object):
         # 获取相关redis key, 用户上一次在rov召回池对应的位置
         pool_key, idx = self.get_last_recommend_video_idx(province_code=province_code,
                                                           record_key_prefix=record_key_prefix,
-                                                          pool_key_prefix=pool_key_prefix)
+                                                          pool_key_prefix=pool_key_prefix,
+                                                          last_video_key_prefix=last_video_key_prefix)
         if not pool_key:
             return []
         pool_recall_result = []
@@ -1765,7 +1771,8 @@ class PoolRecall(object):
         log_.info({
             'logTimestamp': int(time.time() * 1000),
             'request_id': self.request_id,
-            'operation': 'rov_recall_24h_dup',
+            'operation': push_from,
+            'pool_recall_result': pool_recall_result,
             'executeTime': (time.time() - start_time) * 1000
         })
         return pool_recall_result[:size]