liqian 3 년 전
부모
커밋
71979349a9
2개의 변경된 파일60개의 추가작업 그리고 0개의 파일을 삭제
  1. 8 0
      config.py
  2. 52 0
      video_recall.py

+ 8 - 0
config.py

@@ -58,6 +58,14 @@ class BaseConfig(object):
     # 小程序小时级更新结果存放 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.h.{date}.{h}
     RECALL_KEY_NAME_PREFIX_BY_H = 'com.weiqu.video.recall.hot.item.score.h.'
 
+    # 小程序离线ROV模型结果与小程序小时级更新结果去重后 存放 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.dup.h.{date}.{h}
+    RECALL_KEY_NAME_PREFIX_DUP_H = 'com.weiqu.video.recall.hot.item.score.dup.h.'
+
+    # 每个mid存储对应小时级更新结果 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.h.mid.{mid}
+    H_WITH_MID_RECALL_KEY_NAME_PREFIX = 'com.weiqu.video.recall.hot.item.score.h.mid.'
+    # 记录 mid-小时级key 中数据所属(date,h),完整格式:com.weiqu.video.h.record.mid.{mid}
+    H_WITH_MID_RECORD_KEY_NAME_PREFIX = 'com.weiqu.video.h.record.mid.'
+
     # app应用 小程序离线ROV模型结果存放 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.app.{date}
     RECALL_KEY_NAME_PREFIX_APP = 'com.weiqu.video.recall.hot.item.score.app.'
 

+ 52 - 0
video_recall.py

@@ -30,6 +30,58 @@ class PoolRecall(object):
         self.client_info = client_info
         self.redis_helper = RedisHelper()
 
+
+
+    def get_mid_h_key(self):
+        # mid对应小时级视频列表 redis-key
+        h_recall_mid_key = f"{config_.H_WITH_MID_RECALL_KEY_NAME_PREFIX}{self.mid}"
+        # 判断mid对应小时级视频列表 时间记录
+        h_record_key = f"{config_.H_WITH_MID_RECORD_KEY_NAME_PREFIX}{self.mid}"
+        if not self.redis_helper.key_exists(key_name=h_record_key):
+            # ###### 记录key不存在,copy列表,更新记录
+            self.update_mid_data()
+            return h_recall_mid_key
+        else:
+            # ###### 记录key存在,判断date, h
+            now_date = datetime.today()
+            h = datetime.now().hour
+            # 获取记录的date, h
+            record = self.redis_helper.get_data_from_redis(key_name=h_record_key)
+            record_dt = eval(record).get('date')
+            record_h = eval(record).get('h')
+            now_dt = datetime.strftime(now_date, '%Y%m%d')
+            if record_dt == now_dt and int(record_h) == h:
+                # 已获取当前小时数据
+                return h_recall_mid_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_h_recall_key = f"{config_.RECALL_KEY_NAME_PREFIX_BY_H}{now_dt}.{h}"
+                if not self.redis_helper.key_exists(key_name=now_h_recall_key):
+                    # 未更新
+                    return h_recall_mid_key
+                else:
+                    # 已更新,重新获取更新mid对应列表及记录
+                    self.redis_helper.del_keys(key_name=h_recall_mid_key)
+                    self.redis_helper.del_keys(key_name=h_record_key)
+                    ?????
+
+
+
+
+
+
+
+
+
+    def rov_h_pool_recall(self, size=10, expire_time=24*3600):
+        """
+        从小时级更新ROV召回池中获取视频
+        :param size: 获取视频个数
+        :param expire_time: 末位视频记录redis过期时间
+        :return:
+        """
+        pass
+
     def rov_pool_recall(self, size=10, expire_time=24*3600):
         """
         从ROV召回池中获取视频