فهرست منبع

ADD:新内容召回(基于流量池)

sunxy 1 سال پیش
والد
کامیت
33e7e695e4

+ 1 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/common/base/Constant.java

@@ -14,5 +14,5 @@ public class Constant {
     /**
      * 流量池头部视频redis key
      */
-    public static final String FLOW_POOL_RECENT_TOP_VIDEO_REDIS_KEY = "flowpool:recent:top:video";
+    public static final String FLOW_POOL_LAST_24_HOUR_VIDEO_REDIS_KEY = "flowpool:last:24:hour:video";
 }

+ 14 - 7
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/SyncFlowPoolRecentTopVideoJob.java

@@ -3,27 +3,33 @@ package com.tzld.piaoquan.recommend.server.service;
 import com.alibaba.fastjson.JSONObject;
 import com.aliyun.odps.data.Record;
 import com.tzld.piaoquan.recommend.server.common.base.Constant;
-import com.tzld.piaoquan.recommend.server.util.ODPSManager;
+import com.tzld.piaoquan.recommend.server.service.odps.ODPSManager;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
-import javax.annotation.Resource;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
  * @author sunxy
  */
 @Component
+@Slf4j
 public class SyncFlowPoolRecentTopVideoJob {
 
-    @Resource
+    @Autowired
     private ODPSManager odpsManager;
 
-    @Resource
-    private RedisTemplate<String, Object> redisTemplate;
+    @Autowired
+    private RedisTemplate<String, String> redisTemplate;
 
+    // 每个小时的20分执行
+    @Scheduled(cron = "0 20 * * * ? ")
     public void syncFlowPoolRecentTopVideo() {
         // 执行 ODPS Sql,获取数据
         List<Long> videoIds = queryTopVideoIdsByLast6Hour(100);
@@ -31,12 +37,13 @@ public class SyncFlowPoolRecentTopVideoJob {
             return;
         }
         // 将数据写入 Redis
-        redisTemplate.opsForValue().set(Constant.FLOW_POOL_RECENT_TOP_VIDEO_REDIS_KEY,
-                JSONObject.toJSONString(videoIds));
+        redisTemplate.opsForValue().set(Constant.FLOW_POOL_LAST_24_HOUR_VIDEO_REDIS_KEY,
+                JSONObject.toJSONString(videoIds), 2, TimeUnit.DAYS);
     }
 
     private List<Long> queryTopVideoIdsByLast6Hour(Integer topNum) {
         String sql = "SELECT videoid FROM loghubods.flow_pool_video_info_per_hour " +
+                "WHERE dt = '" + odpsManager.getNowHour() + "' " +
                 "ORDER BY 1d_return_cnt DESC LIMIT " + topNum + ";";
         List<Record> records = odpsManager.query(sql);
         if (records == null || records.size() == 0) {

+ 7 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/util/ODPSManager.java → recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/odps/ODPSManager.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.recommend.server.util;
+package com.tzld.piaoquan.recommend.server.service.odps;
 
 import com.aliyun.odps.Instance;
 import com.aliyun.odps.Odps;
@@ -11,6 +11,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
 import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 
 /**
@@ -42,6 +44,10 @@ public class ODPSManager {
         return Collections.emptyList();
     }
 
+    public String getNowHour() {
+        return LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHH"));
+    }
+
     public static void main(String[] args) {
         Calendar cal = Calendar.getInstance();
         cal.setTime(new Date());

+ 1 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/AbstractFlowPoolTopRecallStrategy.java

@@ -24,7 +24,7 @@ import java.util.stream.Collectors;
 public abstract class AbstractFlowPoolTopRecallStrategy implements RecallStrategy {
 
     @Resource
-    protected RedisTemplate<String, Object> redisTemplate;
+    protected RedisTemplate<String, String> redisTemplate;
 
     @Value("${flow.pool.recent.top.video.daily.time.range:}")
     private String timeRangeJson;

+ 1 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/FlowPoolLastDayTopRecallStrategy.java

@@ -19,6 +19,6 @@ public class FlowPoolLastDayTopRecallStrategy extends AbstractFlowPoolTopRecallS
 
     @Override
     public String recallKey(RecallParam param) {
-        return Constant.FLOW_POOL_RECENT_TOP_VIDEO_REDIS_KEY;
+        return Constant.FLOW_POOL_LAST_24_HOUR_VIDEO_REDIS_KEY;
     }
 }